gpt4 book ai didi

javascript - `new function(){this.x=1}` 和 `{x:1}` 之间的区别

转载 作者:行者123 更新时间:2023-12-01 14:19:03 26 4
gpt4 key购买 nike

var Foo = new function(){
this.A = 1;
this.B = 2;
};
var Bar = {
A: 1,
B: 2
};
typeof Foo === "object"
typeof Bar === "object"

两者有什么区别?

我只发现他们的 __proto__ 对象不同:

最佳答案

确定:

var Foo = new function(){
this.A = 1;
this.B = 2;
};

我们有 var Foo = new 一个函数 — 这意味着运行时将调用该函数并将 this 设置为新的-构造的对象,其内部原型(prototype)链接将设置为该函数的“原型(prototype)”属性的值。因为那只是一个在初始化时实例化的匿名函数,它的“原型(prototype)”属性只是一个普通的空对象,所以它实际上什么都不做。构造函数确实初始化了新对象的两个属性,新对象是 new 表达式的返回值。因此,Foo 被分配了一个对该构造对象的引用,并且该对象具有几个分配的属性。它还有一个原型(prototype)链,其中包括来自匿名构造函数的空对象,然后是从 Object 构造函数继承的原型(prototype)。

在此:

var Bar = {
A: 1,
B: 2
};

我们有一个变量 (Bar) 被设置为对象初始化表达式的结果。这总是创建一个仅从 Object 原型(prototype)继承的普通对象。此对象与 Foo 对象的唯一不同之处在于 Foo 对象在其原型(prototype)链中有一个额外的(空)对象。

所以:

  • Foo 最终将成为一个普通对象,而不是一个函数。
  • Bar 也将是一个普通对象,更显然不是一个函数。
  • FooBar相似但不相同(好吧,两个不同的对象永远不会相同,但我指的是它们的特殊特征)因为 Foo 在其原型(prototype)链中有那个额外的空对象。

关于javascript - `new function(){this.x=1}` 和 `{x:1}` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36508736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com