Object.constructor === Object.constructor.constructor // почему? - PullRequest
5 голосов
/ 11 мая 2011

указано здесь https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function свойство конструктора экземпляра объекта функции "определяет функцию, которая создает прототип объекта".Это сбивает с толку, так что Object.constructor это "функция, которая создает прототип объекта"?Какой именно объект является «объектом»?

Я пытаюсь понять, почему само свойство конструктора Object.constructor само по себе?

как таковое: Object.constructor === Object.constructor.constructor// почему?

Редактировать: я нахожу ответ Ти Джей Краудера хорошим, но формулировка его слов довольно расплывчата (что затрудняет понимание при первом прочтении, по крайней мере, для меня).Вот перефразированный ответ:

1) Объект является экземпляром Функция

2) Объект не имеетсвойство с именем constructor , поэтому когда мы вызываем Object.constructor , оно фактически дает нам Object. [[prototype]]. constructor (он же Object .__) proto __. Constructor ).

3) Object.constructor (он же Object .__ proto __. Constructor) является экземпляром Function .

4) Поскольку оба Object и Object.constructor (он же Object).__ proto __. Конструктор ) являются экземплярами Function , поэтому они оба имеют свойство __ proto __ , которое ссылается натот же объект.Другими словами Object .__ proto __ === Object.constructor .__ proto __ (он же Object .__ proto __. constructor .__ proto _ )

5) Строка Object.constructor === Object.constructor.constructor фактически равнаline Object .__ proto __. constructor === Object.constructor .__ proto __. constructor

6) объединяя шаги 4 и5 дайте нам Object.constructor === Object.constructor.constructor

7) перейти к шагу 4)

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

Макет объекта JavaScript

enter image description here

4 голосов
/ 11 мая 2011

Поскольку Object является Function, а конструктор Function является Function, то есть его конструктор сам по себе.

«Объект» является фундаментальным строительным блоком объектно-ориентированногопрограммирование.Object в JavaScript - это функция-конструктор (например, Date или RegExp).Его работа заключается в инициализации новых экземпляров объектов, созданных интерпретатором с помощью ключевого слова new.

Это может быть не по теме или нет, так как вы спрашиваете о конструкторах:

Любая функция в JavaScript может быть функцией конструктора;это просто вопрос того, как вы используете это.Подумайте:

function Foo() {
}

Если я назову это так:

var f = Foo();

... это просто скучная старая функция, и f получает undefined (так как Fooничего не возвращает).Но если я назову это так:

var f = new Foo();

... Я использую это как конструктор , и происходит нечто более интересное:

  1. Интерпретатор создает новый пустой объект.
  2. Интерпретатор устанавливает базовый прототип нового объекта равным Foo.prototype.
  3. Интерпретатор вызывает Foo таким образом, что this обращаетсяк новому объекту.
  4. Когда Foo завершается, если Foo не возвращает значение (или не возвращает объект), результатом выражения new является объект, созданный вШаг 1. (Если Foo возвращает объект, этот объект используется вместо этого; это сложная вещь, которую большинству людей делать не нужно.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...