Подтвердить что ты не робот

Разница JavaScript между функцией и новой функцией

Следующий код JavaScript очень смущает меня. Может ли кто-нибудь помочь мне понять. Почему у PersonY нет свойства прототипа.

PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
​
4b9b3361

Ответ 1

PersonX = function(){};

Помещает ссылку на анонимную функцию на PersonX. PersonX указывает на функцию.

PersonY = new function(){};

Помещает ссылку на вновь созданный экземпляр анонимной функции-конструктора в PersonY. PersonY указывает на объект.


Что касается прототипа, PersonY имеет один. Однако, поскольку не было свойств и методов, связанных с конструктором до и после создания экземпляра, у него есть пробел опытный образец*.

Фактически вы можете проверить прототип PersonY, выполнив console.log(PersonY). Вы увидите, что у него есть свойство прототипа (я вижу его как __proto__ в Chrome), который является "пустым". Но он имеет 2 скрытых свойства, constructor, который является конструкторской функцией, создавшей объект, и другой __proto__, который приводит вас к следующей "цепочке", которая будет объектом Object.

* Не совсем пустой, так как прототип является цепочкой. Этот уровень прототипа может быть пустым, но следующий более высокий прототип может иметь или в этом случае имеет свойства и методы.

Object prototype -> Constructor prototype -> Your Instance will have:
- toString()        - blank                  - toString()
- hasOwnProperty()                           - hasOwnProperty()
- and more...                                - and more...
                                             - ...but nothing from Constructor

Ответ 2

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