defineProperty
方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
语法
Object.defineProperty(obj, prop, descriptor)
参数
obj需要定义属性的对象。prop需被定义或修改的属性名。descriptor需被定义或修改的属性的描述符。
descriptor数据(数据描述符)属性
- Configurable(true) 能否可[delete]删除此属性 、修改属性的特性
- Enumerable(true) 是否可枚举
- Writable(true) 能否可修改属性的值
- Value(undefined) 该属性对应的值
descriptor访问器(存取描述符)属性
- Configurable(true) 同上
- Enumerable(true) 同上
- Get (undefined) getter 的方法(访问对象属性时调用的函数,返回值就是当前属性的值)
- Set(undefined) setter 的方法(给对象属性设置值时调用的函数)
案例
var obj = new Object();
Object.defineProperty(obj, 'name', {
configurable: false,
writable: true,
enumerable: true,
value: '张三'
})
console.log(obj.name) //张三
语法
Object.defineProperties(obj, props)
参数
obj需要定义属性的对象。props该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置
var obj = new Object();
Object.defineProperties(obj, {
name: {
value: '张三',
configurable: false,
writable: true,
enumerable: true
},
age: {
value: 18,
configurable: true
}
})
console.log(obj.name, obj.age) // 张三, 18
Object.getOwnPropertyDescriptor() Object. getOwnPropertyDescriptors()
语法: Object.getOwnPropertyDescriptor(obj, prop) 返回对象属性对应的属性描述符。
语法: Object.getOwnPropertyDescriptors(obj) 返回对象的所有自身属性的描述符