兼容性:ie9以上,ie8实现不彻底
数据属性
Object.defineProperty(对象,'属性',描述符对象)
var o={};
Object.defineProperty(o,"name",{
writable:false, //为false时不能更改,默认false
configurable:false,//为false时不能delete,默认false
enumerable:false, //为false时不能被遍历,默认false
value:"h"
})
for(var i in o){
console.log(i);//没有执行
}
o.name="x";
console.log(o.name);//h
delete o.name;
console.log(o.name);//h
访问器属性:
Object.defineProperty(对象,'属性',描述符对象)
var o={a:1};
Object.defineProperty(o,"name",{
configurable:false,//为false时不能delete,默认true
enumerable:false,//为false时不能被遍历,默认true
get:function(){ //没有此方法表示不能读
return this.a; //执行2(获取值)
},
set:function(newValue){ //没有此方法表示不能写
this.a=12; //执行1(设置值)
}
})
o.name=2;//执行1
console.log(o.name);//12,//执行2
定义多个属性
Object.defineProperties( object,{"属性":{} } );
接收两个对象参数,第一个是要添加和修改属性的对象,第二个对象的属性以第一个对象中属性一一对应
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基于此属性实现数据绑定
网友评论