兼容性:ie9以上,ie8實(shí)現(xiàn)不徹底
數(shù)據(jù)屬性
Object.defineProperty(對(duì)象,'屬性',描述符對(duì)象)
var o={};
Object.defineProperty(o,"name",{
writable:false, //為false時(shí)不能更改,默認(rèn)false
configurable:false,//為false時(shí)不能delete鳄抒,默認(rèn)false
enumerable:false, //為false時(shí)不能被遍歷冶匹,默認(rèn)false
value:"h"
})
for(var i in o){
console.log(i);//沒有執(zhí)行
}
o.name="x";
console.log(o.name);//h
delete o.name;
console.log(o.name);//h
訪問(wèn)器屬性:
Object.defineProperty(對(duì)象,'屬性',描述符對(duì)象)
var o={a:1};
Object.defineProperty(o,"name",{
configurable:false,//為false時(shí)不能delete,默認(rèn)true
enumerable:false,//為false時(shí)不能被遍歷虽风,默認(rèn)true
get:function(){ //沒有此方法表示不能讀
return this.a; //執(zhí)行2(獲取值)
},
set:function(newValue){ //沒有此方法表示不能寫
this.a=12; //執(zhí)行1(設(shè)置值)
}
})
o.name=2;//執(zhí)行1
console.log(o.name);//12棒口,//執(zhí)行2
定義多個(gè)屬性
Object.defineProperties( object,{"屬性":{} } );
接收兩個(gè)對(duì)象參數(shù)辜膝,第一個(gè)是要添加和修改屬性的對(duì)象无牵,第二個(gè)對(duì)象的屬性以第一個(gè)對(duì)象中屬性一一對(duì)應(yīng)
var o={};
Object.defineProperties(o,{
a:{
value:1
},
b:{
value:2
},
c:{
get:function(){},
set:function(bewValue){}
}
})
o.b=2;
console.log(o.a);
注:vue基于此屬性實(shí)現(xiàn)數(shù)據(jù)綁定