Object.defineProperty()

设置对象的属性,可以有两种方法:

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。

你可能感兴趣的:(Object.defineProperty())