美文网首页全栈记
6 Object.defineProperty(); 数据劫持、

6 Object.defineProperty(); 数据劫持、

作者: 官清岁月 | 来源:发表于2019-05-11 08:08 被阅读0次

    1、Object.defineProperty();

    Object.defineProperty(对象,属性,描述符/特性); -> 设置对象属性的特性,默认特性为:可读、可写、可配置、可枚举; -> ES3/5中该方法只做底层使用,ES6开放给开发者使用;

    - - - >>> 作用:其是双向数据绑定的核心方法,主要做数据劫持操作(监控属性变化),同时也是后期ES6中很多语法糖底层实现的核心方法;

    补充: 日常开发中“对象属性特性”的应用 -> ES3/5经常会遇到某类现象,底层实现便是“对象属性特性”的应用,例如var/let声明的变量,是不能进行删除的,就是因为该属性是“不可配置”的;

    for(var prop in Object.prototype){ console.log(prop);};//遍历不到 -> 其不可枚举

    2、数据劫持 -> 巧妙应用Object.defineProperty();中的get();set();监控对象属性的变化;

    (1).VUE双向数据绑定核心功能由 Observer、Compile、Watcher三部分实现,其中Observer部分功能实现由Object.defineProperty实现 ->Observer:监测数据变化进行相应回调(数据劫持);

    (2).数据劫持核心便是调用Object.defineProperty();中的get();set();方法;其只能监控"对象属性"的改变,监控数组需另行处理,而且对象新增属性也无法有效监控,因此ES6推出更完善的Proxy代理,Reflect映射,但其的兼容性不好(新内容),VUE3.0才开始使用,3.0之前采取的还是老方法;

    3、Proxy、Reflect:其比“数据劫持”更加完善,可监控对象及数组的属性变化,同时对象新增属性也可有效监控,但其兼容性不好 -> ES6新增语法,并非语法糖,使用babel工具进行语法降级也不能全部转换为ES5语法,因此其的兼容性不是很好;

    相关文章

      网友评论

        本文标题:6 Object.defineProperty(); 数据劫持、

        本文链接:https://www.haomeiwen.com/subject/rbbpyqtx.html