我尝试理解JavaScript(或至少是V8引擎)在构造函数方面的行为。
我知道,JavaScript构造函数永远不应返回任何内容(因此返回undefined
)。
但考虑以下JavaScript代码:
function Thing() {
return '';
}
var t = new Thing();
console.log(t, typeof t); // => Thing {} "object"
现在,如果你这样做:
function Thing() {
return { hi: '' };
}
var t = new Thing();
console.log(t, typeof t); // => Object {hi: ""} "object"
甚至更多:
function Thing() {
this.a = 'a';
return { hi: '' };
}
var t = new Thing();
console.log(t, typeof t); // => Object {hi: ""} "object"
那么,为什么JavaScript中的构造函数返回一个对象而不是原始值,如果你编写这种代码呢?
这种行为也在这个SO答案中提到,但没有解释。我还翻阅了ECMAScript规范的new Operator部分和它的Construct片段,但这并没有启示性。
有任何提示或知识吗(请用简单易懂的英语)?
new
,所以你期望得到一个对象,也许语言设计团队觉得即使函数返回一个原始类型,你应该总是得到一个对象,但我没有什么确凿的理由来支持这个推理。 - James Thorpetrue
或false
这样的副作用,可以安全地忽略;但如果返回一个“严肃”的对象,则应该将其作为对象构造函数的返回值。 - deceze