Object.defineProperty 相关知识
Object.definedProperty(obj, prop, descriptor)
参数解释
-
obj 操作的对象
-
prop 操作的属性
-
descriptor 描述符
- 描述符分两类:数据描述符,存取描述符
- 只能以其中一种形式出现,如果数据描述符和存取描述符同时出现将会报错
TypeError - 描述符的键值
键值 configurable enumerable writable value set get 属性描述符 Yes Yes Yes Yes No No 存取描述符 Yes Yes No No Yes Yes 默认值 false false false undefined undefined undefined
示例
const obj = {
name: 'demo',
age: 10,
};
Object.defineProperty(obj, 'key', {
value: 12,
writable: false,// 不能重新赋值
configurable: false, // 不能重新配置,不可删除
enumerable: false,// 不能被遍历
})
obj.key = 100;
console.log(obj.key) // 12,writable为false,值无法更改
// TypeError 上面configurable为false,不能再次更改属性的配置
Object.defineProperty(obj, 'key', {
value: 123,
writable: true,
configurable: true,
enumerable: true,
})
// TypeError 上面已经出现过数据描述符,这里不能再出现存取描述符
Object.defineProperty(obj, 'key', {
set: (value) => {
this.key = `value=${value}`
},
get: () => {
return this.key
},
writable: false,
})
用Object.defineProperty实现常量的定义
'use strict'
Object.defineProperty(global, 'demo', { // global是Node中的全局对象,在浏览器中是window
value: 123,
})
console.log(demo); // 123
demo = 666; // TypeError demo是只读的属性