Object-属性类型

ECMAScript中有两种属性:数据属性和访问器属性

  1. 数据属性

数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有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

你可能感兴趣的:(Object-属性类型)