ECMAScript中有两种属性:数据属性和访问器属性
- 数据属性
数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述其行为的特征。
1.[[writable]]: 表示能否修改属性的值。默认值为 true
2.[[Enumerable]]: 表示能否通过for-in循环返回属性。默认值为 true
3.[[Configurable]]: 表示能否通过delete删除属性从而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为 true
4.[[value]]: 包含这个属性的数据值。默认值为 undefined
修改属性默认的特征,必须使用Object.defineProperty()方法。描述对象的属性必须是:writable、Enumerable、Configurable、value。可以设置一个或多个值,可以修改对应的特性值。
let person = {}
Object.defineProperty(person, 'name', {
writable: false,
value: 'zhang'
})
console.log(person.name) // zhang
person.name = 'haha'
// 数据未被修改
console.log(person.name) // zhang
2.访问器属性
有4个特征
1.[[Get]]: 在读取属性时调用的函数。默认值 undefined
2.[[Set]]: 在写入属性时调用的函数。默认值 undefined
3.[[Enumerable]]: 表示能否通过for-in循环返回属性。默认值为 true
4.[[Configurable]]: 表示能否通过delete删除属性从而从新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为 true
let person = {
_name: 'zhang',
age: 18
}
Object.defineProperty(person, 'name', {
get: function() {
return this._name
},
set: function(newValue) {
this._name = newValue
this.age = 21
}
})
person.name = 'haha'
console.log(person.name) // haha
console.log(person.age) // 21
网友评论