Wie greife ich in Javascript auf den Objektprototyp zu?

Lesezeit: 3 Minuten

Benutzer-Avatar
BreakPhreak

In allen Artikeln wird geschrieben, dass JavaScript eine prototypbasierte Sprache ist, was bedeutet, dass jedes Objekt einen Prototyp (oder genauer gesagt eine Prototypkette) hat.

Bisher habe ich folgendes Code-Snippet ausprobiert:

var F = function();
F.prototype.member1 = 1;
var object1 = new F();
console.log(object1.member1); // prints 1

Wie kann ich auf das Prototypobjekt von zugreifen object1? Gibt es eine browserneutrale Möglichkeit, dies zu tun (ich meine, sich nicht auf __proto__ Eigentum? Ich habe diesen Link gesehen, aber vielleicht gibt es seit 2010 neue Entwicklungen) Wenn ich das nicht kann, könnten Sie bitte die Gründe hinter der Motorhaube mitteilen?

  • Objekt1.Konstruktor.Prototyp

    – Silbermond

    6. Januar 2013 um 8:55 Uhr

Benutzer-Avatar
Andreas D.

var f = function();
var instance = new f();

Wenn Sie den Namen kennen instance Klasse Funktionkönnen Sie einfach auf den Prototyp zugreifen als:

var prototype = f.prototype;
prototype.someMember = someValue;

Falls nicht:

1)

var prototype = Object.getPrototypeOf(instance);
prototype.someMember = someValue;

2) oder

var prototype = instance.__proto__;
prototype.someMember = someValue;

3) oder

var prototype = instance.constructor.prototype; // works only if constructor is properly assigned and not modified
prototype.someMember = someValue;

Aus Kompatibilitätsgründen können Sie das folgende Snippet in Ihren Code einfügen (und immer verwenden Object.getPrototypeOf(instance) Prototyp zurückgeben):

if(!Object.getPrototypeOf) {

  if(({}).__proto__ === Object.prototype && ([]).__proto__ === Array.prototype) {

    Object.getPrototypeOf = function getPrototypeOf(object) {
      return object.__proto__;
    };

  } else {

    Object.getPrototypeOf = function getPrototypeOf(object) {

      // May break if the constructor has been changed or removed
      return object.constructor ? object.constructor.prototype : void 0;

    };

  }
}

AKTUALISIEREN:

Gemäß ECMA-262 6. Ausgabe (Juni 2015) __proto__ -Eigenschaft ist als zusätzliches Feature für Webbrowser standardisiert. Alle neuesten Ausgaben der Top-Browser unterstützen es jetzt. Lesen Sie mehr über __proto__:

  • mit einem einzigen Kommentar: __proto__ funktioniert nicht in jedem Browser

    – BreakPhreak

    6. Oktober 2011 um 14:39 Uhr

  • Nicht nur __proto__ aber alle oben genannten drei Methoden funktionieren nicht in allen Browsern. Der Kompatibilitätscode basiert jedoch auf all diesen Methoden. Darüber hinaus unterstützen alle letzten Editionen von Browsern fünf große Browser (IE, FF, Chrome, Safari, Opera). Object.getPrototypeOf()und Kompatibilitätscode wird nur für IE8 und älter benötigt.

    – Andreas D.

    7. Oktober 2011 um 5:12 Uhr

Es sieht aus wie

Object.getPrototypeOf(passedObject);

funktioniert dafür und ist mit modernen Browsern kompatibel.

Hier sind die Kompatibilitätstabellen auf MDN

var F = function(){};
var object1 = new F();
alert(object1.constructor === F);
alert(object1.constructor.prototype === F.prototype);

  • Beachten Sie, dass es manchmal nicht funktioniert. Zum Beispiel a = Function.prototype; a.constructor.prototype ist gleich a. Aber offensichtlich ist der Prototyp von a anders. Sie können bestätigen, dass der Prototyp von a Object.prototype ist, indem Sie a.__proto__ überprüfen, was der beste Weg ist, den Prototyp zu überprüfen.

    – Piotr Dabkowski

    30. Oktober 2014 um 21:23 Uhr

var F = function();
F.prototype.member1 = 1;
F.prototype.getClass = F;

var object1 = new F();
object1.member1 = 2;

console.log(object1.getClass.prototype.member1); // prints 1
console.log(object1.member1); // prints 2

Benutzer-Avatar
Kado

var F = function();
F.prototype.member1 = 1;
var intance = new F();
console.log(instance['member1']);

  • Nur-Code-Antworten werden nicht empfohlen. Bitte fügen Sie eine Erklärung hinzu, wie das Problem dadurch gelöst wird oder wie sich dies von den vorhandenen Antworten unterscheidet. Aus Bewertung

    – Nick

    11. Mai 2019 um 2:39 Uhr

  • Nur-Code-Antworten werden nicht empfohlen. Bitte fügen Sie eine Erklärung hinzu, wie das Problem dadurch gelöst wird oder wie sich dies von den vorhandenen Antworten unterscheidet. Aus Bewertung

    – Nick

    11. Mai 2019 um 2:39 Uhr

1070440cookie-checkWie greife ich in Javascript auf den Objektprototyp zu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy