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.
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 }
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] }
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 } };
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, // ...
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!