Wie greife ich in Javascript auf den Objektprototyp zu?
Lesezeit: 3 Minuten
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
Andreas D.
var f = function();
var instance = new f();
Wenn Sie den Namen kennen instanceKlasse 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.
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
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
10704400cookie-checkWie greife ich in Javascript auf den Objektprototyp zu?yes
Objekt1.Konstruktor.Prototyp
– Silbermond
6. Januar 2013 um 8:55 Uhr