2010-05-30 54 views
5

當用作新對象的構造函數(使用'new'關鍵字)時,JavaScript函數體中的return語句的效果如何?JS構造函數中的返回語句

+0

請參閱:http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS 2010-05-30 14:28:15

回答

17

通常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.

+1

+1,回答撤消。 – Matchu 2010-05-30 14:29:16

+0

謝謝,這正是我想知道的。 – Tony 2010-05-30 15:02:41

1

使用new操作的原因是爲了確保this構造內部指新的上下文,它支持:

this.functionName = function(){...}; 

,並允許使用instanceof操作者:

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

使用return {...}這樣的構造內否定這兩種效果this不會與這樣的模式是必要的,並且作爲instanceof將返回false

+0

感謝您的回覆,我認爲這暴露了js構造函數的缺點。 – Tony 2010-05-30 15:00:41

+0

或顯示語言的靈活性:) – 2010-05-30 15:14:56