设置对象的属性,可以有两种方法:
1、使用构造函数和字面量的形式
let aa = {}
aa.name = 'miaomiao'
aa.say = function() {}
2、使用Object.defineProperty()给对象添加属性
语法
Object.defineProperty(obj, prop, descriptor)
返回值
返回值为传入的对象obj
参数释意
obj: 传入的需要新增或修改属性的对象;
prop: 新增或者修改的属性;
descriptor: 对属性prop添加特性描述;
descriptor
目前给对应的属相添加特性有两种形式:
1、数据描述
value: 属性值, // 任意类型的值,默认undefined
writable: true, | false // 是否可写,默认为false
enumerable: true, | false // 是否可被for in 或 Object.keys()枚举到
configurable: true | false // 是否可以删除目标属性,或 是否可以重写属性的其他特性,默认false
2、存取器描述
设置或读取目标属性的值
getter 是一种获取属性值的方法
setter 是一种修改属性值得方法
注意:使用存取器描述时,不能使用value和writable特性
实例如下:
let aa = {}
let initValue = 'hello'
Object.defineProperty(aa, 'newKey', {
get: function () {
return initValue
},
set: function (value) {
initValue = value
},
enumerable: true,
configurable: true
})
console.log(aa.newKey) // 'hello'
aa.newKey = 'hello word'
console.log(aa.newKey) // 'hello word'
注意:使用Object.defineProperty给属性添加特性时,没有写出的特性都是默认为默认值,writable/enumerable/configurable默认都为false。