javascript - 构造函数何时返回 `this` 以及何时返回被告知要返回的内容?

标签 javascript

看这个例子。这里定义了两个奇怪的构造函数。我说奇怪是因为两者都有返回语句并且不返回(隐式)this就像通常的构造函数一样。

但奇怪的是......当用 new 调用时运算符...

1) C3 返回新构造的 this对象,即使它被告知返回“ggg”。
2) C2 返回它被告知要返回的内容(不是 this 对象)。

为什么会有这种行为差异? C2和C3在概念上有什么区别?

构造函数何时返回 this它什么时候返回被告知要返回的内容?

function C2() {
    this.a = 1;
    return {b: 2};
}
var c2 = new C2();
console.log(c2.a); //undefined
console.log(c2.b); //2
console.log(c2);   //{b:2}
function C3() {
    this.a = 1;
    return "ggg";
}
var c3 = new C3();
console.log(c3.a); //1
console.log(c3);   //C3 {a: 1}

最佳答案

查看新运算符的文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

Returns this if the function doesn't return its own object.

对于 C3,您不会返回对象(字符串是基元),因此返回“this”。

关于javascript - 构造函数何时返回 `this` 以及何时返回被告知要返回的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757307/

相关文章:

javascript - 将 XML 插入 DOM 会导致类/id 选择器不起作用

java - 如何将值从 javascript 传递到隐藏字段

javascript - setTimeout被连续的AJAX请求阻塞?

javascript - 我在运行这个jsp页面时不断收到错误

javascript - 如果 else 没有按预期工作,我的逻辑有问题吗?

javascript onclick 导航(多层)- 如何分离父点击和子点击?

javascript - 按数组值选择选择框选项

javascript - 如何使 $filter 在 angularjs 的所有 Controller 功能中可用?

javascript - 了解闭包编译器警告

javascript - 使用 jquery 定位事件目标