以下JavaScript代码对我来说非常混乱。任何人都可以帮助我理解。为什么PersonY没有原型属性。
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
答案 0 :(得分:34)
PersonX = function(){};
将匿名函数的引用放入PersonX
。 PersonX
指向一个函数。
PersonY = new function(){};
将对新构造的匿名构造函数实例的引用放入PersonY
。 PersonY
指向一个对象。
关于原型,PersonY
有一个原型。但是,由于没有附加到构造函数before和after实例化的属性和方法,因此它具有空白原型 *。
您可以通过PersonY
实际检查console.log(PersonY)
的原型。您将看到它具有原型属性(我在Chrome中将其视为__proto__
),这是“空白”。但它有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
答案 1 :(得分:0)
那是因为它实际上是在内存中实例化的对象,作为函数的副本;原型实际上只在创建实例的上下文中有意义,所以一旦创建它,就没有逻辑结构来表示它的含义。