Javascript - Getting ‚undefined‘, wenn sie versuchen Array Prototyp zu erhalten
-
21-08-2019 - |
Frage
Ich denke, es ist ein 05.00 brain drain, aber ich habe Probleme mit diesem Verständnis.
obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"
Warum ist obj.prototype
nicht Funktion Array(){ }
als Prototyp der Rückkehr? Es tut Referenz Array
als Konstrukteur.
Lösung
Da die Instanz keinen Prototyp haben, die Klasse * der Fall ist.
Möglicherweise Sie obj.constructor.prototype
oder alternativ obj.constructor==Array
* um genauer zu sein, die Konstruktor hat den Prototyp, aber natürlich in JS-Funktionen = Klassen = Konstrukteuren
Andere Tipps
Ich bin mir nicht sicher, dass Sie das prototype
Objekt aus einer Instanz eines Objekts zugreifen können. Das folgende Verhalten könnte Ihnen helfen:
alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"
obj.prototype
nicht zurückkehren function Array() { ... }
wie Konstruktor des Objekts ist.
In Ihrem Beispiel obj
ist eine Instanz eines Array
, nicht die Klasse Array
selbst.
Ein andere Möglichkeit, es zu verstehen ist, dass zum Beispiel, kann man nicht von einer Instanz erbt ein Objekt (oder Klasse), können Sie nur vom Objekt erben (oder Klasse) selbst, das in Ihrem Beispiel bedeutet dies, dass Sie aus dem Array
Objekt erben konnten, aber nicht von einer direkten Instanz des Array-Objekts wie obj
.
Nach der ECMA-Spezifikation wurde ein Prototyp Link Objekt ist nicht sichtbar, aber die meisten modernen Browser (Firefox, Safari, Chrome) lassen Sie es über die __proto__
Eigenschaft sehen, so versuchen:
obj = ['a','b'];
alert( obj.__proto__ );
Ein Objekt hat auch die `Konstruktoreigenschaft‘ auf dem Bau eingestellt, so können Sie versuchen:
obj = ['a','b'];
alert( obj.constructor.prototype );
Allerdings kann obj.constructor
nach einer Objekt Konstruktion geändert werden, wie obj.constructor.prototype
, ohne die eigentlichen Prototyp Zeiger von obj zu ändern.
Nicht wirklich mein Ding, aber tut so definieren sie „obj“ ein Array machen? Versuche
obj = new Array();
obj[0] = "a";
obj[1] = "b";