Heim > Web-Frontend > js-Tutorial > Probleme und Lösungen, die durch die Erweiterung von Array.prototype.indexOf für JS_Basic-Kenntnisse verursacht werden

Probleme und Lösungen, die durch die Erweiterung von Array.prototype.indexOf für JS_Basic-Kenntnisse verursacht werden

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-05-16 16:18:36
Original
1310 Leute haben es durchsucht

Array verfügt nicht über eine indexOf-Methode, daher ist es schwierig, den Index eines Elements in einem Array zu finden. Zur Vereinfachung des Aufrufs wird Array.prototype.indexOf() durch den Prototyp-Prototyp erweitert, was es einfacher macht bequem zu verwenden. Beim Durchlaufen des Arrays gab es jedoch ein Problem mit diesem benutzerdefinierten indexOf.

Code kopieren Der Code lautet wie folgt:

Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i ) {
if (this[i] == item)
gib i zurück
}
return -1;
}

Direkt bei Verwendung von

Code kopieren Der Code lautet wie folgt:

var arr=[1,2,3,4,5]; var index=arr.indexOf(1); //index==0

Nach der Erweiterung ist es sehr komfortabel und bequem zu bedienen und schafft eine harmonische Szene...

Aber einmal wurde beim Durchlaufen von Array-Elementen eine for..in..-Schleife verwendet, was andere Probleme verursachte und die harmonische Atmosphäre störte.

Code kopieren Der Code lautet wie folgt:
var a=["Zhang Fei", "Guan Yu", "Liu Bei", "Lü Bu"]; for(var p in a){
document.write(p "=" a[p] "
"); }



Ursprünglich wollte ich die Namen dieser vier Personen ausgeben, aber was wurde ausgegeben?
Die Ausgabe lautet tatsächlich:

Code kopieren Der Code lautet wie folgt: //0=Zhang Fei
//1=Guan Yu
//2=Liu Bei
//3=Lu Bu
//indexOf=function(item) { for (var i = 0; i < this.length; i ) { if (this[i] == item) return i }



Zusätzlich zur Eingabe des Namens wird auch eine eigene erweiterte Methode indexOf ausgegeben. Das Verrückte ist jedoch, dass Firefox „normal“ ist und nur die Namen von vier Personen enthält.

AusgabeindexOf, der selbst erweitert werden kann, was verständlich ist. Schließlich durchläuft for..in alle benutzerdefinierten Attribute eines Objekts oder alle Elemente eines Arrays.

Warum also nicht Firefox?

Ich habe es später herausgefunden, nachdem ich die Informationen überprüft hatte,

Array unterstützt bereits Array.indexOf() in Javascript-Version 1.6, und das von mir verwendete Firefox ist Version 3.5, das bereits Javascript 1.8 unterstützt. IndexOf ist eine inhärente Methode von Array selbst.

Obwohl ich IE8 verwende, unterstützt der IE nur Version 1.3 von JavaScript.

Daher betrachtet IE8 indexOf als ein „benutzerdefiniertes Attribut“, während Firefox es als ein inhärentes Attribut betrachtet, das von sich selbst nativ unterstützt wird.

Ist das wirklich so?

Führen Sie ein Experiment durch, benennen Sie indexOf in myIndexOf um und versuchen Sie es erneut. Als Ergebnis geben sowohl IE als auch Firefox myIndexOf aus, was beweist, dass der vorherige Punkt korrekt ist.

Dann kommt hier ein weiteres Problem. Jetzt verwenden viele Projektcodes diese Methode, aber jetzt muss ich for..in verwenden, um die Elemente des Arrays selbst auszugeben. Ich möchte es nicht selbst verlängern. Was soll ich tun, wenn ich nach Russland komme?

Glücklicherweise stellt Javascript die Methode hasOwnProperty bereit.

Schauen Sie sich die Beschreibung an:

Code kopieren Der Code lautet wie folgt: Jedes von Object abgeleitete Objekt erbt die Methode hasOwnProperty. Diese Methode kann verwendet werden, um zu bestimmen, ob ein Objekt die angegebene Eigenschaft als direkte Eigenschaft dieses Objekts hat. Diese Methode überprüft nicht die Prototypenkette des Objekts

Wenn man sich die Beschreibung ansieht, ist es genau das, was wir wollen.
Machen Sie einfach ein Urteil für...in... und es ist OK

Code kopieren

Der Code lautet wie folgt: if(a.hasOwnProperty(p)){                   document.write(p "=" a[p] "
"); }


Darüber hinaus finden Sie hier ein Beispiel für die Verwendung von hasOwnProperty aus dem Internet:

Code kopieren

Der Code lautet wie folgt:

Funktion Buch(Titel, Autor) { 
   this.title = Titel; 
   this.author = Autor; 
  } 
   Book.prototype.price = 9,99; 
   Object.prototype.copyright = "herongyang.com"; 
   var myBook = new Book("JavaScript Tutorials", "Herong Yang"); 
   // Integrierte Eigenschaften auf der Ebene des Basisprototyps ausgeben 
   document.writeln("/nObject.prototype's integrierte Eigenschaften:"); 
   dumpProperty(Object.prototype, "constructor"); 
   dumpProperty(Object.prototype, "hasOwnProperty"); 
   dumpProperty(Object.prototype, "isPrototypeOf"); 
   dumpProperty(Object.prototype, "toString"); 
   dumpProperty(Object.prototype, "valueOf"); 
   dumpProperty(Object.prototype, "copyright"); 
   // Integrierte Eigenschaften auf der Ebene „Mein Prototyp“ ausgeben 
   document.writeln("/n==================/nBook.prototype's integrierte Eigenschaften:"); 
   dumpProperty(Book.prototype, "constructor"); 
   dumpProperty(Book.prototype, "hasOwnProperty"); 
   dumpProperty(Book.prototype, "isPrototypeOf"); 
   dumpProperty(Book.prototype, "toString"); 
   dumpProperty(Book.prototype, "valueOf"); 
   dumpProperty(Book.prototype, "copyright"); 
   // Integrierte Eigenschaften auf Objektebene ausgeben 
   document.writeln("/n==================/nmyBook's integrierte Eigenschaften:"); 
   dumpProperty(myBook, "constructor"); 
   dumpProperty(myBook, "hasOwnProperty"); 
   dumpProperty(myBook, "isPrototypeOf"); 
   dumpProperty(myBook, "toString"); 
   dumpProperty(myBook, "valueOf"); 
   dumpProperty(myBook, "copyright"); 
Funktion dumpProperty(object, property) { 
   Var-Vererbung;  
   if (object.hasOwnProperty(property))  
      Vererbung = „Lokal“; 
   sonst 
      inheritance = „Geerbt“; 
   document.writeln(property ": " inheritance ": "
      Objekt[Eigenschaft]); 
}

查看浏览器支持javascript到哪个版本:

复制代码 代码如下:

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
http://www.w3.org/1999/xhtml"> Browser-JavaScript-Versionsunterstützungstest


Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage