乐趣区

JavaScript面向对象的程序设计学习笔记。

属性类型
ECMAScript 中有两种属性:数据属性和访问器属性。数据属性:数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。
[[Configurable]]: 表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。在对象上直接定义的属性,它们的这个特性默认值为 true。
[[Enumerable]]: 表示能否通过 for-in 循环返回属性。在对象上直接定义的属性,它们的这个特性默认值为 true。
[[Writable]]: 表示能否修改属性的值。在对象上直接定义的属性,它们的这个特性默认为 true.
[[Value]]: 包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined。
要修改属性默认的特性,必须使用 ECMAScript5 的 Object.defineProperty() 方法。这个方法接受三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符对象的属性必须是:configurable、enumerable、writable 和 value。设置其中的一个或多个值,可以修改对应的特性值。例如:
var person = {};
Obejct.defineproperty(person,’name’,{
writable:false,
value:’Nics’
})
console.log(person.name)//Nics
person.name = ‘tom’;
console.log(person.name)//Nics
这个例子创建了一个明为 name 的属性,它的值是只读的,如果为它指定新的值,在非严格模式下,赋值操作将被忽略;在严格模式下赋值操作将会抛出错误。如果把 configurable 设置为 false,表示不能从对象中删除属性,而且一旦把属性定义为不可配置的,就不能再把它变为可配置了。此时再调用 Object.defineProperty() 方法修改 writable 之外的特性都会抛出错误。也就是说,可以多次调用 Object.defineProperty() 方法修改同一个属性,但在把 configurable 特性设置为 false 之后就会有限制了。再调用 Object.defineProperty() 方法创建一个新的属性的时候,如果不指定 configurable、enumerable、writable 特性的默认值都是 false。

退出移动版