Heim > Web-Frontend > js-Tutorial > Wie kann verhindert werden, dass benutzerdefinierte Array- und Objektprototypmethoden in „for...in'-Schleifen angezeigt werden?

Wie kann verhindert werden, dass benutzerdefinierte Array- und Objektprototypmethoden in „for...in'-Schleifen angezeigt werden?

Barbara Streisand
Freigeben: 2024-12-10 14:37:10
Original
924 Leute haben es durchsucht

How to Prevent Custom Array and Object Prototype Methods from Appearing in `for...in` Loops?

Methoden für Array.prototype und Object.prototype definieren, die nicht in for-in-Schleifen auftauchen

Beim Erweitern von Array- oder Objektprototypen mit Hilfsmethoden wie find() oder filter() verwenden, muss unbedingt sichergestellt werden, dass diese Methoden nicht in for-in-Schleifen auftauchen. Dies verhindert potenzielle Probleme und Kompatibilitätsbedenken.

Das Problem: In for in-Schleifen angezeigte Methoden

In JavaScript iterieren for in-Schleifen über die Eigenschaften eines Objekts. Wenn Sie benutzerdefinierte Methoden für Array.prototype oder Object.prototype definieren, werden diese Methoden als Eigenschaften in For-In-Schleifen angezeigt:

Array.prototype.find = function(testFun) {
  // ...
};

const arr = [1, 2, 3];

for (let prop in arr) {
  console.log(prop); // Outputs: 1, 2, 3, find
}
Nach dem Login kopieren

Lösung 1: Vermeiden Sie For-In-Schleifen mit Arrays

Die einfachste Lösung besteht darin, die Verwendung von For-In-Schleifen mit Arrays zu vermeiden. Verwenden Sie stattdessen herkömmliche for-Schleifen oder Array.prototype-Methoden wie forEach():

Array.prototype.find = function(testFun) {
  // ...
};

const arr = [1, 2, 3];

for (let i = 0; i < arr.length; i++) {
  // Do something with arr[i]
}
Nach dem Login kopieren

Lösung 2: Auf veraltete Methodensyntax prüfen

Um veraltete for-in-Schleifen zu verarbeiten, die dies nicht tun Um die Existenz einer Methode zu überprüfen, können Sie Ihrer Methodendefinition eine Schutzprüfung hinzufügen:

Object.prototype.hasOwnProperty = function() {
  // ...
};

Array.prototype.find = function(testFun) {
  if (this.hasOwnProperty('find')) {
    // Method already exists, do something
  } else {
    // Add the method
  }
};
Nach dem Login kopieren

Lösung 3: Verwenden Object.defineProperty

ES5.1 führte Object.defineProperty ein, mit dem Sie nicht aufzählbare Eigenschaften für Objekte definieren können. Dadurch wird verhindert, dass die Eigenschaften in for-Schleifen angezeigt werden:

Object.defineProperty(Array.prototype, "find", {
  enumerable: false,
  // ...
Nach dem Login kopieren

Fazit

Mit den oben genannten Techniken können Sie benutzerdefinierte Methoden für Array.prototype und Object.prototype erstellen, die nicht stören mit For-In-Schleifen. Dies stellt die Kompatibilität sicher und verhindert potenzielle Probleme für anderen Code, der auf dem erwarteten Verhalten basiert.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass benutzerdefinierte Array- und Objektprototypmethoden in „for...in'-Schleifen angezeigt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage