Рубрики
Без рубрики

JavaScript VS Python: объект

Python почти все – это объект (если утверждение IF не, например, но каждый поплавок, строка O … Помечено JavaScript, Python, начинающим.

Python Почти все – это объект ( если authoor не, например, но каждый поплавок, строка или функция – это объект). «Переменные» – это имена, а «переменное назначение» (например) на самом деле Привязка имени к объекту . Каждое связывание имеет сферу, которая определяет его видимость.

A = []
B = A # both A and B are bound to the same object
B.append("hi") # object bound to B (and A) is mutated
print(A, B)
>>> ["hi"], ["hi"]

Итак, Python имеет смежные и неизменные объекты. Например, Список это смешно, int неизменно.

JavaScript В JS мы также говорим, что почти все является объектом. Что не является объектом примитивных значений – NULL, undefined, String, Number, Boolean и символ. Так как отдельно от очевидных различий с Python (как тот факт, что Python не имеет undefined и нулевой Только Нет И это тоже объект), я хочу немного поговорить о том, что подразумевается под объект на любом языке.

Объект в JS – это «хранение» ключей: ценные пары. Исходя из Питона, когда я впервые начал использовать JS, я думал, что «ага, объекты в JS похожи на словари в Python».

const myObj = {id: 5};

Но лучше эквивалентно объекту JavaScript в Python – это не словарь, это класс. Поэтому, когда мы говорим объект в Python, мы имеем в виду экземпляр некоторых класс. Но оба языка ориентированы на объект. Просто в JS нет различия между классом и экземпляром класса.

Python: Определение класса говорит только о том, какие методы и свойства будут каждый случай у него, это просто план. Объект/экземпляр, это фактический дом.

JS: Поскольку нет классов (чертежи), но только объекты, каждый объект является как чертеж, так и в доме.

Чтобы продемонстрировать, мы можем добавить новые методы к объектам на лету.

JavaScript: (Примечание: Ключевое слово Класс только синтаксический сахар)

function Box(id, label) {
    this.id = id;
    this.label = label;
}

const myBox = new Box(1, "stuff");

function open() {
  return `${this.label} is open`;
}

// add method to "class definition" (object)
Box.prototype.open = open; 

console.log(myBox.open()); // prints: stuff is open

function close() {
  return `${this.label} is closed`;
}

// add method to "class instance" (also object)
myBox.close = close;

console.log(myBox.close()); // prints: stuff is closed

Это было бы не так просто в Python:

class Box(object):
    def __init__(self, id, label):
        self.id = id
        self.label = label 


def open(self):
    return f"{self.label} is open"

myBox = Box(1, 'stuff')

# add method to class definition
Box.open = open 

print(myBox.open()) # prints: stuff is open

def close(self):
    return f"{self.label} is closed"

# add method to class instance (object)? not so fast!
myBox.close = close 

print(myBox.close()) # throws a TypeError: 
# close() missing a required argument

Таким образом, в Python не так просто добавить методы на объект (который является экземпляром класса) на лету, Но это возможно: Отказ

import types

myBox.close = types.MethodType(close, myBox)

Разница между Python и JavaScript можно рассматривать как разницу в подходе для решения концепции ООП. Это что это пример иллюстрирует – только что вы не можете сделать это в Python так же, как вы бы в JS.

Хорошо. Последнее – концепция прохода по значению против прохода посредством ссылки. Короче – проход по значению означает, что если у нас есть переменная А а затем пропустите его на некоторую функцию, которая модифицирует ее, а затем посмотреть на А Опять же, изменения, сделанные внутри функции, не будут отражены. С проходом по ссылке они будут.

Python и Js на поверхности ведут себя так же:

s = "hello"
def add(arg):
    arg = arg + "bye"
    return arg

add(s) # the returned value doesn't have a name
# bound to it here, but it would be "hellobye"
print(s) # "hello"

И это будет вести себя точно так же в JS.

let s = "hello";

function add(arg) {
  arg = arg + "bye";
  return arg;
}

add(s); // no assignment to return value
console.log(s); // hello

Однако концепция этих двух разных. В Python String – неизменный объект. В JavaScript String – это Примитивный Тип данных, а не объект. И примитивные типы данных неизменны. Таким образом, передача примитивного типа данных в JS (или неизменном объекте в Python) к функции, даст вам поведение «проход по значению». И прохождение объекта в JS (или Musicable Object (E.g. Список) в Python) приведет к «простученному справочному» поведению.

И акцент на поведение Потому что вещи реализуются по-разному на разных языках. Например, в C/C ++ «Ссылка» имеет очень конкретное значение, но в Python это не существует. Больше на этом здесь Отказ

Источники: 1 – это вызов Python по значению или позвоните по ссылке? Ни один 2 Почему JS OOP, хотя у него нет классов 3 стека в переполнении

Оригинал: “https://dev.to/justforaday__/javascript-vs-python-object-1c03”