Javascript - Getting ‚undefined‘, wenn sie versuchen Array Prototyp zu erhalten

StackOverflow https://stackoverflow.com/questions/673107

  •  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.

War es hilfreich?

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";

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top