2016-07-08 2 views
0

Я узнал о конструкторах, и я наткнулся на ключевое слово new.Где новый оператор создает новый объект?

var obj = new myContructor();

я узнал, что он создал новый объект, установите его прототип в качестве constructor.prototype, установите его свойства в соответствии с this ключевого слова, и, наконец, возвращает этот объект.

Теперь я смущен относительно того, где именно он создает новый объект, как внутри памяти, или где-то там, где он неустойчив.

И что мы имеем в виду, когда говорим, что он ВОЗВРАЩАЕТ этот объект, что он создает копию нового объекта в местоположении var obj или ссылается ли объект obj на то, где он создал новый объект?

+0

ThisBinding - это то, что поддерживает интерпретатор JavaScript, поскольку он оценивает код JavaScript, как специальный регистр CPU, который содержит ссылку на объект. Интерпретатор обновляет значение ThisBinding при создании контекста выполнения в одном из трех разных случаев. Проверьте [ЭТО] (http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) ссылку. – Shubham

+0

Я закрываю это слишком широко, хотя это может быть дубликат некоторых сообщений. В MDN вы можете найти его объяснением – Jai

+0

Объект создается в куче, управляемой средой выполнения JavaScript. Возвращается номер, соответствующий ячейке памяти в куче (ссылка), поскольку объекты передаются по «значению ссылки». Этот номер (он же «ссылка») копируется. Копирование всего объекта было бы непомерно дорогостоящим, и в любом случае вы этого не хотите. – Ben

ответ

1

В Javascript много вещей, происходящих за кулисами; вещи постоянно создаются в памяти, к которым у вас нет доступа. Насколько вы обеспокоены этим при написании Javascript кода:

  1. new создает объект и делает все вещи прототип
  2. myConstructor() выполняется, и this внутри функции устанавливается на этот объект
    (иначе говоря: myContructor вызывается с объектом в качестве контекста)
  3. после myConstructor делается, объект присваивается переменной obj в результате всего этого

Есть куча оговорок относительно того, что может вернуть myConstructor и как это влияет на результат, но мы будем игнорировать это для простоты. Основная цепочка событий new создает объект → myConstructor видит этот объект как thisobj «получает» этот объект в качестве возвращаемого значения new.

Конечно, все это создание объекта и передача его в разные места выполняется движком Javascript и требует внутренней памяти объекта где-то в памяти.

2

в памяти или где-то, где он является летучим

Да, конечно. Как и любая другая часть данных в программе.

мы подразумеваем, говоря, что возвращает этот объект

Вы делаете вызов функции. Вызовы функций имеют возвращаемые значения. Объектом является возвращаемое значение этого вызова функции.

создает экземпляр нового объекта в месте расположения вар OBJ

Это создает его в функции, то она возвращает ссылку на него (так же, как и любой другой объект), и эта ссылка хранится в переменной, потому что вы использовали назначение.

+1

Mumble mumble nitpick: объект не является непосредственно возвращаемым значением вызова функции (если это не так, конечно). Это действительно результат оператора 'new' ...: o) – deceze

+0

Что значит« создает объект INSIDE the function »? –

Смежные вопросы