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
Antwort
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.
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
.
Vielen Dank für Ihre Antwort, ich denke, dass dies einen Nachteil von js Konstruktoren enthüllt. – Tony
Oder zeigt die Flexibilität der Sprache :) –
- 1. In CSV in Array in Python konvertieren
- 2. 'IN' & 'NICHT IN' in Linq Abfrage
- 3. % in% Veränderung in dplyr Paket in R
- 4. Schleifen in Schleifen in Schleifen in Java
- 5. Funktionsparameter in Zeichenfolge in Parameter in Objekt
- 6. In Operator in Linq
- 7. In Python in bash
- 8. in Verknüpfungstabelle in Hibernate
- 9. IN-Klausel in sqlite
- 10. \ in path.combine in C#
- 11. "IN" Operator in Linq
- 12. in
- 13. in
- 14. Synchronisation in Vektoren in Java
- 15. SQLite in Operator in query()
- 16. Blobs in Blobstore in GAE
- 17. mehr IN-Bedingungen in JPQL
- 18. RadUpload in FormView in RadAjaxPanel
- 19. Javascript in select in Selen
- 20. SQL - IN vs. NICHT IN
- 21. Bindung in ItemTemplate in ResourceDictionary
- 22. Split in Großbuchstaben in PHP?
- 23. Kreuzung in sqlite3 in Python
- 24. Assoziativität von "in" in Python?
- 25. Vorwahlwert in Combobox in extjs
- 26. memcpy in float in int
- 27. Konvertierung in Dezimal in Matlab?
- 28. lapply in lapply in data.table
- 29. FileNotFoundEception in FileInputStream in Android
- 30. "Find() in Einfügen" in MongoDB?
Siehe: http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS