2010-05-30 8 views
5

Was ist der Effekt einer return-Anweisung im Textkörper der JavaScript-Funktion, wenn es als Konstruktor für ein neues Objekt verwendet wird (mit 'new' Schlüsselwort)?Return-Anweisung in JS-Konstruktoren

+0

Siehe: http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS

Antwort

17

Normalerweise return verlässt einfach den Konstruktor. Wenn der zurückgegebene Wert jedoch ein Objekt ist, wird er als new Ausdruck verwendet.

Bedenken Sie:

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

Displays 1, aber

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

Displays 2.

+1

+1, Antwort widerrufen. – Matchu

+0

Danke, es ist genau das, was ich wissen wollte. – Tony

1

Der Grund, den new Operator zu verwenden ist, um sicherzustellen, dass this innerhalb des Konstruktors bezieht sich auf eine neu Kontext, der unterstützt:

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

, und die Verwendung des instanceof Bediener zu ermöglichen:

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

Mit return {...} in einem solchen Konstruktor negiert diese Effekte sowohl als this nicht mit einem solchen Muster benötigt werden, und wie instanceof werden zurückgeben false.

+0

Vielen Dank für Ihre Antwort, ich denke, dass dies einen Nachteil von js Konstruktoren enthüllt. – Tony

+0

Oder zeigt die Flexibilität der Sprache :) –