Heim  >  Artikel  >  Web-Frontend  >  Javascript-Studiennotizen – Objekte (4): für in loop_basic Wissen

Javascript-Studiennotizen – Objekte (4): für in loop_basic Wissen

WBOY
WBOYOriginal
2016-05-16 16:43:201174Durchsuche

Erstes Beispiel:

// Poisoning Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
for(var i in foo) {
 console.log(i); // prints both bar and moo
}

Wir sollten hier auf zwei Punkte achten: Erstens ignoriert die for in-Schleife das aufzählbare Attribut, das auf false gesetzt ist. Zum Beispiel die Längeneigenschaft eines Arrays. Der zweite Grund ist, dass eine zu lange Prototypenkette die Leistung beeinträchtigt, da for in die gesamte Prototypenkette durchläuft.

Enumerable ist ein sehr unbekanntes Wort. Tatsächlich kann man seinen Schatten in JavaScript kaum finden und es wurde vom Autor tatsächlich von Ruby entlehnt. Der Zweck der Erstellung von Aufzählungen besteht nicht darin, sie unabhängig zu verwenden, sondern auf „gemischte“ Weise zu verwenden. Viele Methoden in Prototype verwenden Aufzählungen gemischt, sodass sie als Eckpfeiler des Prototyps bezeichnet werden können. Ich werde es hier nicht im Detail vorstellen. Weitere Informationen finden Sie unter - Enumerable.
Da wir das Verhalten der for in-Schleife selbst nicht ändern können, können wir nur andere Methoden verwenden, um Eigenschaften herauszufiltern, die nicht in der Schleife angezeigt werden sollen, und zwar über „Javascript Learning Notes – Objects (3): hasOwnProperty<.>》Wir wissen, dass die hasOwnProperty-Methode dies tun kann.

HasOwnProperty-Filter verwenden

Noch immer das vorherige Beispiel verwenden:

// Poisoning Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
 for(var i in foo) {
 if (foo.hasOwnProperty(i)) {
  console.log(i);
 }
 }
Dies ist die einzig richtige Schreibweise. Da wir die hasOwnProperty-Methode verwendet haben, wird dieses Mal nur moo ausgegeben. Wenn die hasOwnProperty-Methode nicht anwendbar ist, tritt beim Erweitern von Object.prototype ein Fehler auf.

Viele Frameworks entscheiden sich jetzt dafür, Methoden von Object.prototype zu erweitern. Wenn wir diese Frameworks verwenden, werden wir daher auf Probleme stoßen, wenn wir for-in-Schleifen verwenden, die nicht mit hasOwnProperty gefiltert werden.

Zusammenfassung

Es wird empfohlen, eine gute Gewohnheit zum Filtern von Eigenschaften mit hasOwnProperty zu entwickeln. Machen Sie keine Annahmen über die laufende Umgebung und unabhängig davon, ob das native Prototypobjekt erweitert wird.

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