Heim  >  Artikel  >  Web-Frontend  >  Ein Missverständnis über die Javascript-Prototypkette und die Fähigkeiten von „prototyp_javascript“.

Ein Missverständnis über die Javascript-Prototypkette und die Fähigkeiten von „prototyp_javascript“.

WBOY
WBOYOriginal
2016-05-16 16:33:041400Durchsuche

Vorher war ich etwas verwirrt über die Prototypenvererbung und die Suche nach Identifikatoren in der Prototypenkette von Javascript,

Zum Beispiel der folgende Code:

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {};
var foo = new Foo();
Foo.prototype.label = "laruence";
Alert(foo.label); //Ausgabe: laruence
Alert(Foo.label);//Ausgabe: undefiniert

Ich habe heute folgendes Bild gesehen:

Javascript-Objektlayout
Siehe auch in der Javascript-Objekthierarchie:

Der Prototyp wird nur für Eigenschaften verwendet, die von Objekten/Instanzen geerbt werden, die von dieser Funktion erstellt wurden. Die Funktion selbst verwendet nicht den zugehörigen Prototyp.

Mit anderen Worten, der Prototyp des Funktionsobjekts hat keinen Einfluss auf den Suchprozess der Prototypkette,

Ich habe heute unter Firefox entdeckt (weil Firefox [[Prototyp]] über __proto__ verfügbar gemacht hat), was tatsächlich an der Bezeichnersuche teilnimmt, ist das __proto__ des Funktionsobjekts,

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {};
var foo = new Foo();
Foo.__proto__.label = "laruence";
Alert(Foo.label); //Ausgabe: laruence
Alert(foo.label);//Ausgabe: undefiniert

Und natürlich:

Code kopieren Der Code lautet wie folgt:

Funktion Foo() {};
Alert(Foo.__proto__ === Foo.prototype); //Ausgabe: false

Außerdem wurde auch erklärt,

Code kopieren Der Code lautet wie folgt:

Alert(Object.forEach); // undefiniert

Function.prototype.forEach = function(object, block, context) {
for (Var-Schlüssel im Objekt) {
If (typeof this.prototype[key] == "undefiniert") {
               block.call(context, object[key], key, object);
}
}

};

alarm(Object.forEach);
alarm(Function.forEach);
Alert(Object.forEach === Function.forEach); // true
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn