Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象
Object.defineProperty(obj, prop, descriptor)
obj
要在其上定义属性的对象。prop
要定义或修改的属性的名称。descriptor
将被定义或修改的属性描述符。被传递给函数的对象
详细语法介绍请参考MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
自己简单写了个示例,方便理解Object.defineProperty
var data = { name: "jade", age: 18, } Object.keys(data).forEach(key=>{ var vl = data[key]; Object.defineProperty(data,key,{ get(){ console.log(key + "...get..."); return vl; }, set(value){ console.log(key + "...set... value is " + value); vl = value; } }); }) console.log("age:"+data.age); data.age = 20; data.name = "jake"; console.log("age:"+data.age);
在读取属性或者给属性赋值时,会进入get和set方法,进而可以派发出事件,通知监听者。
原文:https://www.cnblogs.com/fanlu/p/10801651.html