Proxy 与 Object.defineProperty 的区别及优劣势
Proxy 的优势如下:
- Proxy代理整个对象,Object.defineProperty只代理对象上的某个属性;
- 数组新增删除修改时,Proxy可以监听到;
- Proxy 有多达 13 种拦截方法,不限于 apply、ownKeys、deleteProperty、has 等等是 Object.defineProperty 不具备的;
- 如果对象内部要全部递归代理,则Proxy可以只在调用时递归,而Object.defineProperty需要在一开始就全部递归,Proxy性能优于Object.defineProperty;
- 对象上定义新属性时,Proxy可以监听到;
Object.defineProperty 的优势如下:
- 兼容性好,支持 IE9及以上,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平,因此 Vue 的作者才声明需要等到下个大版本( 3.0 )才能用 Proxy 重写。