下面的 JavaScript 代码让我很困惑。谁能帮我理解。为什么 PersonY 没有原型属性。
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
下面的 JavaScript 代码让我很困惑。谁能帮我理解。为什么 PersonY 没有原型属性。
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
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
那是因为它实际上是作为函数副本在内存中实例化的对象;原型实际上仅在创建实例的上下文中才有意义,因此一旦创建它,就没有逻辑结构来解释其含义。