<Script> Funktion p () {var len = argumente.length; für (var i = 0; i <len; i ++) {document.write (Argumente [i]+"<br/>"); }} Funktion myClass (x, y) {this.x = x; this.y = y; this.show = function () {return this.x+this.y; }} var m1 = neue myclass (1,2); var m2 = neue myclass (3,4); p (m1.show (), m2.show ()); </script>Bestehende Probleme
1. Da alle Instanzen, die nach derselben Methode definiert wurden, kopieren, kann die Effizienz (Speichereffizienz und ineffiziente Ausführung) durch Prototyp -Vererbung gelöst werden.
2.. Es kann durch Schließungen gelöst werden
Das von Attributen zugegriffene Betriebsobjekt ist keine Variable, sondern eine Referenz auf das Objekt
Verarbeitung von Lesen nur ganzzahlige Teile numerischer Werte
Math [this <0? 'Celling': 'Floor'] (this);
Assoziatives Array
In JS müssen Sie Objekte übergeben, um assoziative Arrays zu implementieren
Grundlegende Operationen werden von Schlüssel, Setzen von Elementen und Löschen von Elementen durchgeführt.
<Script> var map = {x: 3, y: 4}; p (map.x); map löschen.x; //Truep(map.x); // undefiniert Das Ergebnis des Zugriffs auf nicht existierende Elemente ist undefiniert. Da der Wert auf undefiniertes Wert festgelegt werden kann, ist es unmöglich zu beurteilen, ob der Wert existiert, indem der Wert mit undefinierter Vergleich besteht. Sie können es für in a = 'undefined'; // True </script>Als assoziatives Array sollten Sie darauf achten
<Script> Funktion myClass (x, y) {this.x = x; this.y = y;} myclass.prototype.z = 5; var obj = neue myclass (1,2); für (var key in obj) {p (key+":"+obj [key]); // Die durch den Prototyp geerbten Attribute werden aufgezählt. //undefinedp(obj.z); // 5 // Die durch den Prototyp geerbten Attribute können nicht gelöscht werden. //Truep(obj.z);//5//Wenn Sie Objekte als assoziatives Array verwenden, werden normalerweise Literale erstellt. Auch wenn die Ansicht ein leeres Objektliteral verwendet, um ein assoziatives Array ohne Elemente zu erstellen, ist das Attribut P des Prototyps P ('ToString' in OBJ); // truevar obj1 = {}; p ('tostring' in obj1); // true // enumenp (obj1.length); // undefinedfor (var k in obj1) {p (obj1 [k]);} // Es werden keine Elemente aufgezählt. Dies liegt an dem aufzählbaren Attribut.//Truevar obj1 = {}; // undefinedfor (var k in obj1) {p (obj1 [k]);} // Es werden keine Elemente aufgezählt. Dies liegt an dem aufzählbaren Attribut.//Truevar obj1 = {}; //falsemap['toString']];p(map.hasownProperty('toString ')); // tredelete map ['tostring']; p (map.hasownProperty ('tostring')); // false </script>Attribute
Die Attribute des Objekts haben auch einige Attribute
Die folgende Tabelle fasst die in der fünften Ausgabe von ECMascript definierten Attributen zusammen, und der Attributwert wird als Wertattribute definiert.
Tabelle 1
Attributname | Bedeutung |
Beschreibbar | Der Wert des Attributs kann umschreiben |
Aufzählbar | Kann von für in in zählt werden |
Konfigurierbar | Sie können die Attribute ändern und die Attribute löschen |
erhalten | Getter -Funktion, die Eigenschaftswerte angibt |
Satz | Setterfunktion, die Attributwerte angeben kann |
Unveränderliche Objekte
Das heißt, ein Objekt, dessen Zustand nach der Generation nicht geändert werden kann, und ein String -Objekt ist ein typisches unveränderliches Objekt.
Die flexible Verwendung unveränderlicher Objekte kann die Robustheit des Programms verbessern, z.
Unveränderliche Objekte können in JS implementiert werden
1. Ausblenden Sie das Attribut (Status versteckt) und liefern keine Änderungsvorgänge (Abschlussimplementierung).
2. Flexible Verwendung von Funktionen, die von ECMascript in der fünften Ausgabe bereitgestellt werden
3.. Flexible Verwendung von beschreibbaren, konfigurierbaren Attributen, Settern und Getters
Funktionen, die zur Unterstützung unveränderlicher Objekte in ECMascript Version 5 verwendet werden, sind in der folgenden Tabelle angezeigt
Methodenname | Neue Attribute | Attribut löschen | Änderung des Attributwerts | Bestätigungsmethode |
Voraussetzungen | X | O | O | Object.ISEXTLINGLIBLE |
Siegel | X | X | O | Objekt.ISSALED |
einfrieren | X | X | X | Object.isfordrozen |
Object.PreventeXTensions Beispiel
<Script> var obj = {x: 2, y: 3}; Object.Preventextensions (obj); // kann das Attribut obj.z = 4; p (Object.keys (obj)) nicht hinzufügen; // x, y // Das Attribut obj.y; p (Object.keys (obj)); // x // kann den Attributwert obj.x = 20; p (obj.x) nicht hinzufügen; //20//object.seal Beispiel legt das Konfigurierbare des Attributs auf false var obj = {x: 2, y: 3}; // x, ydelete obj.x; //falsep(Object.keys(obj));/x,y/can ändern den Attributwert obj.x = 20; p (obj.x); // 20 // Objekt. obj.z = 3; P (Objekt.Keys (obj)); // x, y // kann den Attributwert obj.x = 20; p (obj.x); // 20 </script> ändernAufpassen müssen
1. Für die obigen drei Methoden kann es nicht wiederhergestellt werden, wenn sie geändert werden.
2. Wenn Sie die ererbte Methode im Prototyp -Vererbung unverändert machen möchten, müssen Sie sie anzeigen.