defineProperty和Proxy

defineProperty

语法:

defineProperty(obj,key,{

})

---参数

obj:要代理的对象

key:要监听的属性

{}:分发get、set函数的对象

---返回值

监听过后的原对象


该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性并返回这个对象

将某个对象的所有属性进行监听代理

优点:兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平

缺点:

1.不能监听数组的变化

2.必须遍历对象的每个属性

3.必须深层遍历嵌套的对象

proxy

语法:

new proxy(target,{

get(target,key){}

set(target,key,newValue){}

})

实例一个Proxy对象对某个对象进行代理

返回一个新对象

---参数

target:代理的目标对象

{}:执行操作时触发代理行为的函数

---返回值

代理过后的新对象


优点:

1.Proxy可以直接监听整个对象而非属性。

2.Proxy可以直接监听数组的变化。

3.Proxy有13中拦截方法,如ownKeys、deleteProperty、has 等是 Object.defineProperty 不具备的。

4.Proxy返回的是一个新对象,我们可以只操作新的对象达到目的,而Object.defineProperty只能遍历对象属性直接修改;

5.Proxy做为新标准将受到浏览器产商重点持续的性能优化,也就是传说中的新标准的性能红利。

6.对于深层嵌套可以在get返回时将Proxy实例返回

省去了defineProperty需要递归遍历的麻烦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容