Pelaksanaan dan penggunaan pembina js, tatasusunan indeks dan kemahiran atribut_javascript

WBOY
Lepaskan: 2016-05-16 16:31:13
asal
1766 orang telah melayarinya
<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>
Salin selepas log masuk

Masalah sedia ada
1. Memandangkan semua kejadian menyalin entiti yang ditakrifkan dengan kaedah yang sama, kecekapan (kecekapan memori rendah dan kecekapan pelaksanaan rendah) boleh diselesaikan melalui pewarisan prototaip
2. Ketidakupayaan untuk mengawal akses kepada nilai atribut (swasta, awam) boleh diselesaikan melalui penutupan
Operan akses atribut bukan pembolehubah tetapi rujukan kepada objek
Memproses membaca hanya bahagian integer nilai
Matematik[ini<0?'celling':'floor'](this);

Susun atur bersekutu
Tatasusunan bersekutu mesti dilaksanakan melalui objek dalam js
Operasi asas: mendapatkan nilai melalui kekunci, menetapkan elemen, memadam elemen

<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>
Salin selepas log masuk

Mata yang perlu diambil perhatian sebagai tatasusunan bersekutu

<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>
Salin selepas log masuk

Sifat harta benda

Sifat objek juga mempunyai beberapa sifat
Jadual berikut meringkaskan atribut yang ditakrifkan dalam ECMAScript Edisi ke-5 Nilai atribut ditetapkan sebagai atribut nilai
Tingkatan 1

Objek Kekal Iaitu, objek yang keadaannya tidak boleh diubah selepas dijana objek rentetan ialah objek tidak boleh ubah biasa Penggunaan fleksibel objek tidak boleh ubah boleh meningkatkan keteguhan program Contohnya, apabila menghantar kepada parameter kaedah, terdapat kaedah yang menulis semula kandungan objek, dsb. Objek tidak berubah boleh dilaksanakan dalam js dengan cara berikut 1. Sembunyikan atribut (status) dan jangan berikan operasi perubahan (pelaksanaan penutupan) 2. Fleksibel menggunakan fungsi yang disediakan oleh ECMAScript edisi kelima 3. Fleksibel menggunakan atribut boleh tulis, boleh dikonfigurasikan, setter dan getter Fungsi yang digunakan untuk menyokong kebolehubahan objek dalam ECMAScript Edisi Ke-5 Lihat jadual di bawah

属性的属性名

含义

writable

可以改写属性的值

enumerable

可以通过for in枚举出

configurable

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

get

可以指定属性值的getter函数

set

可以指定属性值的setter函数

Nama atribut atribut

Maksud


boleh ditulis

Anda boleh menulis ganti nilai atribut

terhitung

boleh dikira melalui untuk dalam

boleh dikonfigurasikan

方法名

属性新增

属性删除

属性值变更

确认方法

preventExtensions

x

o

o

Object.isExtensible

seal

x

x

o

Object.isSealed

freeze

x

x

x

Object.isFrozen

Anda boleh menukar atribut atribut dan anda boleh memadamkan atribut

dapatkan

Fungsi Getter yang boleh menentukan nilai atribut
<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>
Salin selepas log masuk
set


Fungsi penetap yang boleh menentukan nilai atribut
Nama kaedah Atribut baharu Pemadaman atribut Perubahan nilai atribut Kaedah pengesahan
preventExtensions x o o Object.isExtensible
meterai x x o Object.isSealed
bekukan x x x Object.isFrozen
Contoh Object.preventExtensions Perlu ambil perhatian 1. Setelah tiga kaedah di atas ditukar, ia tidak boleh dipulihkan 2. Jika anda mahu kaedah yang diwarisi dalam warisan prototaip tidak boleh diubah, anda perlu memaparkannya
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan