Zusammenfassung der Fehler in Javascript für in
Die for in-Anweisung wird verwendet, um die Attribute (Mitglieder) eines Objekts wie folgt aufzulisten
var obj = { name:"jack", getName:function(){return this.name} }; //输出name,getName for(var atr in obj) { alert(atr); }
Ist Ihnen aufgefallen, dass es keine Ausgabe von objs toString, valueOf und anderen integrierten Eigenschaften (oder integrierten Membern, versteckten Eigenschaften und vordefinierten Eigenschaften) gibt? Das heißt, for in wird verwendet, um die angezeigten Mitglieder (benutzerdefinierte Mitglieder) des Objekts aufzulisten.
Wenn die integrierten Attribute überschrieben werden, was wird ausgegeben, wenn wir objs toString umschreiben
var obj = {name:"jack", getName:function(){return this.name}, toString:function(){return "I'm jack."} } for(var atr in obj) { alert(atr); }
?
1. Unter IE6/7/8 ist es dasselbe, als würde man toString nicht umschreiben, immer noch nur den Namen getName ausgeben
2. Opera/Safari Die folgenden Ausgaben: name, getName, toString
Wenn Sie Attribute/Methoden zum integrierten Prototyp hinzufügen, ist dieser auch durchquerbar, wenn for in
Object.prototype.clone = function() {} var obj = { name: 'jack', age: 33 } // name, age, clone for (var n in obj) { alert(n) }
zu Object.prototype Methode clone hinzugefügt, alle Browser zeigen clone an, wenn für in.
Dies spielt möglicherweise keine Rolle, da es im Allgemeinen nicht empfohlen wird, den Prototyp des integrierten Konstruktors zu erweitern, was einer der Gründe für den Niedergang von Prototype.js ist. jQuery und Underscore erweitern den Selbstprototyp nicht. Ersteres macht viel Aufhebens um das jQuery-Objekt, und letzteres hängt einfach alle Methoden unter Underscore.
Aber manchmal erweitern wir den Prototyp des integrierten Konstruktors auf Browsern, die ES5 nicht unterstützen (IE6/7/8). im Willen Es ist anders. Wie folgt
if (!Function.prototype.bind) { Function.prototype.bind = function(scope) { var fn = this return function () { fn.apply(scope, arguments) } } } function greet(name) { alert(this.greet + ', ' + name) } for (var n in greet) { alert(n) }
IE6/7/8-Ausgaben werden gebunden, andere Browser jedoch nicht. Da bind in modernen Browsern nativ unterstützt wird und for in nicht verfügbar ist, fügt IE6/7/8 bind zu Function.prototype hinzu.
Um es zusammenzufassen: Beim browserübergreifenden Design können wir uns nicht darauf verlassen, dass for in die Mitgliedsnamen des Objekts erhält. Zur Beurteilung verwenden wir im Allgemeinen hasOwnProperty.
Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!
Weitere Artikel zur Fehlerzusammenfassung von Javascript für in finden Sie auf der chinesischen PHP-Website!