Heim  >  Artikel  >  Web-Frontend  >  Implementierung und Verwendung von js-Konstruktoren, Index-Arrays und Attributen_Javascript-Kenntnissen

Implementierung und Verwendung von js-Konstruktoren, Index-Arrays und Attributen_Javascript-Kenntnissen

WBOY
WBOYOriginal
2016-05-16 16:31:131750Durchsuche
<script>
function p(){
 var len=arguments.length;
 for(var i=0;i<len;i++){
  document.write(arguments[i]+"<br/>");
 }
 
}
function Myclass(x,y){
 this.x=x;
 this.y=y;
 this.show=function(){
  return this.x+this.y;
 }
}
var m1=new Myclass(1,2);
var m2=new Myclass(3,4);
p(m1.show(),m2.show());
</script>

Bestehende Probleme
1. Da alle Instanzen mit derselben Methode definierte Entitäten kopieren, kann die Effizienz (geringe Speichereffizienz und geringe Ausführungseffizienz) durch Prototypenvererbung gelöst werden
2. Die Unfähigkeit, den Zugriff auf Attributwerte (privat, öffentlich) zu kontrollieren, kann durch Schließungen
behoben werden Der Operand des Attributzugriffs ist keine Variable, sondern eine Referenz auf das Objekt
Verarbeitung, bei der nur der ganzzahlige Teil eines Werts gelesen wird
Math[this<0?'celling':'floor'](this);

Assoziatives Array
Assoziative Arrays müssen durch Objekte in js implementiert werden
Grundoperationen: Werte über Schlüssel abrufen, Elemente festlegen, Elemente löschen

<script>
var map={x:3,y:4};
p(map.x);
delete map.x; //true
p(map.x); //undefined 对不存在的元素进行访问结果是undefined ,由于可以显示地将值设置为undefined ,因此无法通过将值与undefined比较来判断值是否存在 ,可以通过for in进行枚举
a='undefined';
p(a);//undefined
p(typeof map.x==a); //true
</script>

Punkte, die als assoziatives Array notiert werden sollten

<script>
function Myclass(x,y){
 this.x=x;
 this.y=y;
}
Myclass.prototype.z=5;
var obj=new Myclass(1,2);
for(var key in obj){
 p(key+":"+obj[key]); //会枚举出通过原型继承来的属性
}
//x:1 y:2 z:5
delete obj.x;//true
p(obj.x); //undefined
p(obj.z); //5
//通过原型继承来的属性 无法被delete删除
delete obj.z; //true
p(obj.z);//5
//在将对象作为关联数组使用时,通常都会使用字面量来创建,即使视图通过使用空的对象字面量来创建一个没有元素的关联数组,也仍会从Object类中继承原型的属性
p('toString' in obj); //true
var obj1={};
p('toString' in obj1);//true
//通过 for in枚举
p(obj1.length); //undefined
for(var k in obj1){
 p(obj1[k]);
}
//没有元素 被枚举出来 这是由于enumerable属性的缘故
//通过hasOwnProperty来判断 是本身的属性还是通过 参与原型继承而来的属性
var map={};
p(map.hasOwnProperty('toString')); //false
map['toString']=1;
p(map.hasOwnProperty('toString')); //true
delete map['toString'] ;
p(map.hasOwnProperty('toString'));//false
</script>

Eigenschaften von Eigenschaften

Die Eigenschaften von Objekten haben auch einige Eigenschaften
Die folgende Tabelle fasst die in ECMAScript 5. Edition definierten Attribute zusammen. Der Attributwert wird als Wertattribut
bezeichnet Formular 1

属性的属性名

含义

writable

可以改写属性的值

enumerable

可以通过for in枚举出

configurable

可以改变属性的属性,可以删除属性

get

可以指定属性值的getter函数

set

可以指定属性值的setter函数

Attributname des Attributs

Bedeutung


beschreibbar

Sie können den Wert des Attributs überschreiben

aufzählbar

kann bis in aufgezählt werden
konfigurierbar

方法名

属性新增

属性删除

属性值变更

确认方法

preventExtensions

x

o

o

Object.isExtensible

seal

x

x

o

Object.isSealed

freeze

x

x

x

Object.isFrozen

Sie können die Attribute von Attributen ändern und Attribute löschen

holen

Getter-Funktion, die den Attributwert angeben kann
<script>
var obj={x:2,y:3};
Object.preventExtensions(obj);
//无法新增属性
obj.z=4;
p(Object.keys(obj));//x,y
//可以删除属性
delete obj.y;
p(Object.keys(obj)); //x
//可以更改属性值
obj.x=20;
p(obj.x); //20

//Object.seal例子 将属性的configurable设置为假
var obj={x:2,y:3};
Object.seal(obj);
//无法新增 也无法删除
obj.z=3;
p(Object.keys(obj)); //x,y
delete obj.x; //false
p(Object.keys(obj));//x,y
//可以改变 属性值
obj.x=20;
p(obj.x);//20



//Object.freeze例子 将属性的writable设置为假
var obj={x:2,y:3};
Object.freeze(obj);
//无法新增 也无法删除,也无法改变属性值
obj.z=3;
p(Object.keys(obj)); //x,y
delete obj.x;
p(Object.keys(obj));//x,y
//可以改变 属性值
obj.x=20;
p(obj.x);//20
</script>
einstellen


Setter-Funktion, die Attributwerte angeben kann
Unveränderliches Objekt Das heißt, ein Objekt, dessen Zustand nach der Generierung nicht geändert werden kann, ist ein typisches unveränderliches Objekt Die flexible Verwendung unveränderlicher Objekte kann die Robustheit des Programms verbessern. Beispielsweise gibt es bei der Übergabe an Methodenparameter eine Methode, die den Objektinhalt neu schreibt usw. Unveränderliche Objekte können in js auf folgende Weise implementiert werden 1. Attribute ausblenden (Status) und keine Änderungsoperationen bereitstellen (Abschlussimplementierung) 2. Nutzen Sie flexibel die Funktionen der fünften Ausgabe von ECMAScript 3. Beschreibbare, konfigurierbare Attribute, Setter und Getter flexibel nutzen Funktionen zur Unterstützung der Objektunveränderlichkeit in ECMAScript 5. Edition Siehe die Tabelle unten
Methodenname Neues Attribut Attributlöschung Attributwertänderungen Bestätigungsmethode
Erweiterungen verhindern x o o Object.isExtensible
Siegel x x o Object.isSealed
einfrieren x x x Object.isFrozen
Object.preventExtensions-Beispiel Muss aufpassen 1. Sobald die oben genannten drei Methoden geändert wurden, können sie nicht wiederhergestellt werden 2. Wenn Sie möchten, dass die geerbte Methode bei der prototypischen Vererbung unveränderlich ist, müssen Sie sie anzeigen
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