定义
Object.defineProperty(obj, prop, descriptor) /* obj:需要定义属性的对象 prop:需要定义的属性 descriptor:属性的描述描述符 返回值:返回此对象 */
var obj = {} // 数据描述符 var descriptor = { // 能否delete删除, configurable: false, // 是否可写,默认false, 不能被赋值,只读 writable: false, // 是否可枚举,即是否可以for...in访问属性,默认false enumerable: false, // 属性值,默认undefined value: 'hello', // 访问器描述符,不能与数据描述符同时使用 // get: 读取,默认undefined // set: 设置,默认undefined } Object.defineProperty(obj, 'name', descriptor) console.log(obj.name)
示例:数据响应式 vue
function defineReactive(obj, key, val) { // val,由于闭包的存在,不会被销毁 Object.defineProperty(obj, key, { get() { console.log('get'); return val; }, set(newVal) { if (newVal != val) { console.log('set'); val = newVal; } }, }); } var obj = {}; defineReactive(obj, 'foo', '123') console.log(obj.foo); // get 123 obj.foo = '223' // set console.log(obj.foo); // get 223