JS之Object.defineProperty()方法
程序员文章站
2022-04-04 23:53:01
...
1.数据属性
修改属性默认的属性,必须使用ECMAScript的Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性的名字和一个描述性对象。其中,描述符对象的属性必须是:configurable、enumerable、writabel、和value。设置其中的一或多个值,可以修改对应的特性值。
var person = {};
Object.defineProperty(person,"name",{
writable:false,
value:"zhangsan"
});
alert(person.name);//zhangsan
person.name = "lisi";
alert(person.name);//zhangsan
这个例子创建了一个名为name的属性,它的值“name”是只读的。这个属性的值是不可修改的,如果尝试为它指定新值,则在非严格模式下,赋值操作将被忽略;在严格模式下,赋值操作将会导致抛出错误。类似的规则也适用于不可配置的属性,如:
把configurable设置为false,表示不能从对象中删除属性
var person = {};
Object.defineProperty(person,"name",{
configurable:false,
value:"zhangsan"
});
alert(person.name);//zhangsan
delete person.name;
alert(person.name);//zhangsan
2.访问器属性
访问器属性不能直接定义,必须使用Object.defineProperty()来定义
var book = {
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue-2004;
}
}
});
book.year = 2005;
alert(book.edition);//2
定义多个属性
var book = {};
Object.defineProperties(book,{
_year:{
value:2004
},
edition:{
value:1
},
year:{
get:function() {
return this._year;
},
set:function(newValue) {
if (newValue > 2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
}
});
book.year = 2005;
alert(book.edition);//2
以上代码在book对外上定义了两个数据属性(_year和edtion)和一个访问器属性(year),最终的对象与上面定义的对象相同。唯一的区别就是这里的属性都是在同一时间创建的
参考:《JavaScript高级程序设计(第3版)》
上一篇: Win10联想笔记本禁用集成显卡教程
下一篇: 小米 3S 传言究竟几分可信