函数和新函数之间的JavaScript差异

ris*_*p89 26 javascript new-operator

以下JavaScript代码对我来说非常混乱.任何人都可以帮助我理解.为什么PersonY没有原型属性.

PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
?
Run Code Online (Sandbox Code Playgroud)

Jos*_*eph 34

PersonX = function(){};
Run Code Online (Sandbox Code Playgroud)

将匿名函数的引用放入PersonX.PersonX指向一个功能.

PersonY = new function(){};
Run Code Online (Sandbox Code Playgroud)

将新构造的匿名构造函数实例的引用放入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
Run Code Online (Sandbox Code Playgroud)