gpt4 book ai didi

javascript - 为什么构造函数返回与自身同名的对象

转载 作者:行者123 更新时间:2023-11-28 18:19:55 25 4
gpt4 key购买 nike

创建新对象时,为什么构造函数不返回新创建对象名称的对象

下面,输出的是 cons{x: "hi"} 对象,为什么不是 myobj {x: "hi"}

function cons() {
this.x = "hi";
return null;
}

var myobj = new cons();
console.log(myobj);

This article ,表示“它返回新创建的对象,除非构造函数返回非空对象引用。”因此它应该返回 myobj{x: "hi"}因为上面的构造函数返回 null

最佳答案

In the following, the output is cons{x: "hi"} object, why not myobj {x: "hi"}?

您看到的内容会根据您使用的控制台实现而有所不同,但有些(例如 Chrome 的)确实会向您显示这一点。

cons 是告诉您对象的类型1而不是对象的引用存储在哪个变量中。它是这样您在查看开发工具时就可以轻松区分代码中不同类型的对象。

至于原因:请记住,console.log 不知道它获得的值来自哪里;它不知道该值来自名为 myobj 的变量。当您执行 console.log(myobj) 时,会读取 myobj,然后将该传递到console.log中。因此,即使它的设计者想要它,它也无法打印变量名称。

如果您还想查看变量名称,请将其放入 console.log 调用中:

console.log("myobj", myobj);

示例:

function cons() {
this.x = "hi";
return null;
}

var myobj = new cons();
console.log("myobj", myobj);

<小时/>

This article, says that "It returns the newly created object,unless the constructor function returns a non-null object reference." So it should return myobj{x: "hi"} since the above constructor is returning null.

您混淆了两个不相关的事物,这是可以理解的。使用 new 调用构造函数的结果,以及将对象引用传递到 console.log 的输出。

在您的代码中,var myobj = new cons();确实会导致new创建的新对象存储在myobj中(return null; 对其没有影响)。这句话想说的是,这样的事情不会:

function cons() {
this.x = "hi";
return {hey: "I'm a completely different object"};
}

var myobj = new cons();
console.log(myobj);

在该代码中,cons 通过返回非 null 对象覆盖了 new 的默认行为引用 this 以外的内容。因此,new cons 的结果是对该其他对象的引用,而不是对创建的new对象的引用。这不是构造函数通常需要做的事情,但有时(例如)您希望看起来像构造函数的东西实际上提供以前的实例而不是新对象。

<小时/>

1 宽松地说;在 JavaScript 中,对象实际上没有类型,只是一个原型(prototype)继承谱系。

关于javascript - 为什么构造函数返回与自身同名的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40071708/

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