功能与新功能的JavaScript区别
问题描述:
以下JavaScript代码对我来说非常混乱。任何人都可以帮助我理解。 PersonY为什么没有原型属性。功能与新功能的JavaScript区别
PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);
答
PersonX = function(){};
地方的引用匿名函数成PersonX
。 PersonX
指向一个函数。
PersonY = new function(){};
地方的引用一个匿名构造函数的一新构造的实例为PersonY
。 PersonY
指向一个对象。
关于原型,PersonY
有一个。但是,由于没有附加到构造函数before和after实例的属性和方法,所以它具有空白原型 *。
您可以通过执行console.log(PersonY)
实际检查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
答
这是因为它实际上是在内存中实例化功能的副本的对象;原型在创建实例的过程中确实只有意义,所以一旦创建它,就没有合乎逻辑的构思。
使用'function',而不是'new function'。 –
只要做[永远不要使用第二个构造](http://*.com/q/10406552/1048572)。 – Bergi