Maison > interface Web > js tutoriel > le corps du texte

Implémentation et utilisation des constructeurs js, des tableaux d'index et des compétences d'attributs_javascript

WBOY
Libérer: 2016-05-16 16:31:13
original
1765 Les gens l'ont consulté
<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>
Copier après la connexion

Problèmes existants
1. Étant donné que toutes les instances copient des entités définies par la même méthode, l'efficacité (faible efficacité de la mémoire et faible efficacité d'exécution) peut être résolue grâce à l'héritage du prototype
2. L'impossibilité de contrôler l'accès aux valeurs d'attribut (privées, publiques) peut être résolue par la fermeture
L'opérande d'accès aux attributs n'est pas une variable mais une référence à l'objet
Traitement de lecture uniquement de la partie entière d'une valeur
Math[this<0?'celling':'floor'](this);

Tableau associatif
Les tableaux associatifs doivent être implémentés via des objets en js
Opérations de base : obtenir des valeurs via des clés, définir des éléments, supprimer des éléments

<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>
Copier après la connexion

Points à noter sous forme de tableau associatif

<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>
Copier après la connexion

Propriétés des propriétés

Les propriétés des objets ont aussi quelques propriétés
Le tableau suivant résume les attributs définis dans ECMAScript 5e édition. La valeur de l'attribut est désignée comme attribut de valeur
. Formulaire 1

Objet immuable C'est-à-dire qu'un objet dont l'état ne peut pas être modifié après sa génération. Les objets String sont des objets immuables typiques L'utilisation flexible d'objets immuables peut améliorer la robustesse du programme. Par exemple, lors du passage aux paramètres de méthode, il existe une méthode qui réécrit le contenu de l'objet, etc. Les objets immuables peuvent être implémentés dans js des manières suivantes 1. Masquer les attributs (statut) et ne pas fournir d'opérations de changement (implémentation de clôture) 2. Utilisez de manière flexible les fonctions fournies par la cinquième édition d'ECMAScript 3. Utilisez de manière flexible des attributs, des setters et des getters inscriptibles et configurables Fonctions utilisées pour prendre en charge l'immuabilité des objets dans ECMAScript 5e édition Voir le tableau ci-dessous

属性的属性名

含义

writable

可以改写属性的值

enumerable

可以通过for in枚举出

configurable

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

get

可以指定属性值的getter函数

set

可以指定属性值的setter函数

Nom de l'attribut

Signification


inscriptible

Vous pouvez écraser la valeur de l'attribut

énumérable

peut être énuméré pour dans

configurable

方法名

属性新增

属性删除

属性值变更

确认方法

preventExtensions

x

o

o

Object.isExtensible

seal

x

x

o

Object.isSealed

freeze

x

x

x

Object.isFrozen

Vous pouvez modifier les attributs des attributs et vous pouvez supprimer des attributs

obtenir

Fonction Getter qui peut spécifier la valeur de l'attribut
<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>
Copier après la connexion
ensemble


Fonction Setter qui peut spécifier des valeurs d'attribut
Nom de la méthode Nouvel attribut Suppression d'attribut Changements de valeur d'attribut Méthode de confirmation
empêcher les extensions x o o Object.isExtensible
sceau x x o Object.isSealed
geler x x x Object.isFrozen
Exemple Object.preventExtensions Il faut faire attention 1. Une fois les trois méthodes ci-dessus modifiées, elles ne peuvent plus être restaurées 2. Si vous souhaitez que la méthode héritée dans l'héritage prototypique soit immuable, vous devez l'afficher
Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal