JavaScript对象

来源:互联网 发布:2017年网络购物 编辑:程序博客网 时间:2024/06/03 22:40
javascript 对象
1、数据属性:
[[Configurable]] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。直接在对象上定义的属性,它们的默认值为true
[[Enumberable]] 表示能否通过for-in 循环返回属性。直接在对象上定义的属性,它们的这个特性默认值为true
[[Writable]] 表示能否修改属性的值。直接在对象上定义的属性,他们的这个特性默认值为true
[[Value]] 包含这个属性的数据值。 读取属性值的时候,从这个位置读; 写入属性值的时候,把新值保存在这个位置。这个特性的默认值为undefined
var person={};
Object.defineProperty(person, "name", {
writable: false,
value: "Bruce"
});


alert(person.name);  //Bruce
person.name = "Bao";
alert(person.name);  //Bruce


这个例子创建一个名为name的属性,它的值"Bruce"是只读的。这个属性的值是不可修改的,如果尝试为它指定新值,则在非严格模式下,赋值操作将会导致抛出错误。
类似的规则也适用于不可配置的属性。例如:
var person = {};
Object.defineProperty(person, "name", {
configurable:false,
value: "Bruce"
})


alert(person.name);   //Bruce
delete person.name;
alert(person.name);   //Bruce
把configurable 设置为false, 表示不能从对象中删除属性。如果对这个属性进行调用delete, 则在非严格模式下什么也不会发生,而在严格模式下会导致错误。而且,一旦把属性定义为不可配置的,就不能再把它变回可配置了。此时,再调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误:
var person = ();
Object.defineProperty(person, "name",{
configurable: false,
value: "Bruce"
});


//抛出错误
Object.defineProperty(person, "name", {
configurable: true,
value: "Bruce"
});


也就是说可以多次调用Object.defineProperty()方法修改同意属性,但在把configurable特性设置为false之后就会有限制了。
在调用Object.defineProperty()方法时,如果不指定,configurable、enumberable、和writable特性默认值都是false。多数情况下,可能没有必要利用Object.defineProperty()方法提供这些高级功能。不过,理解这些概念对理解JavaScript对象却非常有用。
0 0
原创粉丝点击