功能与新功能的JavaScript区别

问题描述:

以下JavaScript代码对我来说非常混乱。任何人都可以帮助我理解。 PersonY为什么没有原型属性。功能与新功能的JavaScript区别

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

使用'function',而不是'new function'。 –

+0

只要做[永远不要使用第二个构造](http://*.com/q/10406552/1048572)。 – Bergi

PersonX = function(){}; 

地方的引用匿名函数成PersonXPersonX指向一个函数。

PersonY = new function(){}; 

地方的引用一个匿名构造函数的一新构造的实例为PersonYPersonY指向一个对象。


关于原型,PersonY有一个。但是,由于没有附加到构造函数beforeafter实例的属性和方法,所以它具有空白原型 *。

您可以通过执行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 
+0

是的。 'typeof new function(){} =>“object”' –

+0

谢谢,@Joseph的回答和评论真的很有帮助。 – riship89

+0

哪个或哪两个sintaxs性能更好? – rkmax

这是因为它实际上是在内存中实例化功能的副本的对象;原型在创建实例的过程中确实只有意义,所以一旦创建它,​​就没有合乎逻辑的构思。