28

下面的 JavaScript 代码让我很困惑。谁能帮我理解。为什么 PersonY 没有原型属性。

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

2 回答 2

37
PersonX = function(){};

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

PersonY = new function(){};

将对匿名构造函数的新构造实例的引用放入PersonY. PersonY指向一个对象。


对于原型,PersonY有一个。但是,由于在实例化之前之后都没有附加到构造函数的属性和方法,因此它有一个空白原型*。

您实际上可以PersonY通过执行检查原型console.log(PersonY)。你会看到它有一个__proto__“空白”的原型属性(我在 Chrome 中看到它)。但是它有两个隐藏的属性,constructor一个是构造对象的构造函数,另一个__proto__是引导你到下一个“链环”的Object对象。

*不是真正的空白,因为原型是一个链条。这个原型级别可能是空白的,但下一个更高的原型可能有,或者在这种情况下,确实有属性和方法。

Object prototype -> Constructor prototype -> Your Instance will have:
- toString()        - blank                  - toString()
- hasOwnProperty()                           - hasOwnProperty()
- and more...                                - and more...
                                             - ...but nothing from Constructor
于 2012-05-11T19:09:01.287 回答
0

那是因为它实际上是作为函数副本在内存中实例化的对象;原型实际上仅在创建实例的上下文中才有意义,因此一旦创建它,​​就没有逻辑结构来解释其含义。

于 2012-05-11T19:10:44.627 回答