下面的 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 中看到它)。但它有 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
那是因为它实际上是一个在内存中实例化的对象,作为函数的副本;原型实际上只在创建实例的上下文中有意义,因此一旦创建,就没有逻辑结构来说明这意味着什么。