В книге Секреты JavaScript Ninja, 2013, страница 125, говорится:
Каждый объект в JavaScript имеет неявное свойство с именем
constructorкоторый ссылается на конструктор, который использовался для создания объекта. И поскольку прототип является свойством конструктор, каждый объект имеет способ найти свой прототип.
На самом деле это может быть одна из самых ошибочных вещей, которые я слышал о JavaScript, и она исходила от предположительно эксперта JavaScript. Не правда ли, что
-
любой объект JavaScript "имеет способ найти свой прототип" с использованием внутреннего свойства
[[prototype]](как в спецификации ECMA-262, стр. 32). Он доступен в Chrome и Firefox с помощью__proto__, а в более поздних версиях IE, используяObject.getPrototypeOf -
любой объект получает свойство
constructor, получая его в объекте прототипа, на который указывает__proto__. Свойствоconstructorиногда даже не устанавливается корректно, так как некоторые библиотеки JavaScript или фреймворки вообще не используют его.constructor- свойство объекта-прототипа, а не свойство самого объекта:
(как показано в инструменте разработчика Chrome):
> function Foo() {}
undefined
> var foo = new Foo()
undefined
> foo.hasOwnProperty("constructor")
false
> foo.__proto__.hasOwnProperty("constructor")
true
> foo.__proto__.constructor === Foo
true
Является ли приведенное выше (1) и (2) истинным? Что такое "неявное свойство с именем constructor" в JavaScript, как в цитируемом тексте? Старается ли это что-то вроде [[prototype]], являющегося внутренним свойством? Но что более важно, я хотел бы знать, верны ли (1) и (2) выше, а не то, что говорит цитируемый текст.