JavaScript 函数和新函数的区别

IT技术 javascript new-operator
2021-02-21 06:58:09

下面的 JavaScript 代码让我很困惑。谁能帮我理解一下。为什么 PersonY 没有原型属性。

PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
​
2个回答
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
谢谢,@Joseph 的回答和评论真的很有帮助。
2021-04-26 06:58:09
是的。 typeof new function(){} => "object"
2021-04-30 06:58:09
@rkmax 你无法比较它们。两者都做不同的事情。
2021-05-02 06:58:09

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