【发布时间】:2021-01-30 13:21:13
【问题描述】:
我刚刚遇到了一件让我非常惊讶的事情。考虑以下四个函数:
function A() {
this.q = 1;
}
function B() {
this.q = 1;
return this;
}
function C() {
this.q = 1;
return 42;
}
function D() {
this.q = 1;
return {};
}
让我们从所有对象中创建对象(通过new):
console.log('a', new A());
console.log('b', new B());
console.log('c', new C());
console.log('d', new D());
这是输出:
a A { q: 1 }
b B { q: 1 }
c C { q: 1 }
d {}
前三个似乎表明函数返回什么并不重要,JS 只关心每个函数对this 的作用(这是我以前相信的,顺便说一句)。但最后一个与此相矛盾。
那么,这里发生了什么?我修改后的规则是“如果函数返回Object,我们保留它。否则,我们保留this”。但我对此感到很不确定。
【问题讨论】:
-
读取 this description of the new operator 的第 4 点 如果函数没有返回对象,则返回 this。 - 所以,你已经用修改后的规则搞定了
标签: javascript javascript-objects