当JavaScript函数作为一个构造函数被使用时(使用'new'关键字),在函数体中使用return语句会产生什么效果?
通常情况下,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。
new
操作符的原因是确保构造函数内部的this
指向一个新的上下文,这样做可以支持以下功能:this.functionName = function(){...};
为了允许使用instanceof
运算符,并且使内容更加通俗易懂:
function foo() {...}
var bar = new foo();
alert(bar instanceof foo);
在这样的构造函数中使用 return {...}
将会否定这两个效果,因为这种模式下不需要使用 this
,而且 instanceof
会返回 false
。