JS构造函数中的返回语句

9
当JavaScript函数作为一个构造函数被使用时(使用'new'关键字),在函数体中使用return语句会产生什么效果?

请参见:https://dev59.com/CnI-5IYBdhLWcg3wMFQf - Christian C. Salvadó
2个回答

22

通常情况下,return仅仅是退出构造函数。但是,如果返回值是一个对象,它将被用作new表达式的值。

考虑以下示例:

function f() {
   this.x = 1;
   return;
}
alert((new f()).x);

显示1,但是

function f() {
   this.x = 1;
   return { x: 2};
}
alert((new f()).x);

显示2。


谢谢,这正是我想知道的。 - Tony

2
使用new操作符的原因是确保构造函数内部的this指向一个新的上下文,这样做可以支持以下功能:
this.functionName = function(){...};

为了允许使用instanceof运算符,并且使内容更加通俗易懂:

function foo() {...}
var bar = new foo();
alert(bar instanceof foo);

在这样的构造函数中使用 return {...} 将会否定这两个效果,因为这种模式下不需要使用 this,而且 instanceof 会返回 false


谢谢您的回复,我认为这揭示了JS构造函数的一个缺点。 - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接