Object.defineProperty用于定义设置对象的属性的一种方法。
var obj {a : 1}Object.defineProperty(obj, name, {value: 新范式})console.log(obj) 函数参数 Object 第一个参数是操作的对象必须propertyName 属性名要设置的属性descripor 描述符 描述符参数 value设置值默认是underfinedwritable是否可修改enumerable是否可枚举configurable这个参数我也不是很懂 属性设置除了对属性的对象进行描述还有一种set/get设置。可以捕捉属性改变或者读取的事件做一定的操作。
例子如下所示通过Object.defineProperty实现了双向绑定。
<!DOCTYPE html><html><head><meta charsetutf-8><title></title></head><body><div></div><input typetext/><script>let obj {};function watch(obj, name, callback){let value obj.name;Object.defineProperty(obj, name, {set(newValue){value newValue;callback(value);},get(){return value;}})}function doChange(value){document.querySelector(div).innerHTML value;document.querySelector(input).value value;}document.querySelector(input).addEventListener(input, (e) > {obj[val] e.target.value;});watch(obj, val, doChange);</script></body></html>