开发者社区> 问答> 正文

响应式(双向数据绑定)的原理?

展开
收起
前端问答 2019-11-23 20:21:38 1145 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    回答面试官版:

    vue实现双向数据绑定的原理就是利用了Object.defineProperty(),这个方法重新定义了对象获取属性值get和设置属性值set的操作来实现的。

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

    vue3中使用proxy方法进行了重写。

    代码分解版:

    // 这是将要被劫持的对象
    const data = {
      name: ""
    };
    function say(name) {
      if (name === "古天乐") {
        console.log("给⼤家推荐⼀款超好玩的游戏");
      } else if (name === "渣渣辉") {
        console.log("戏我演过很多,可游戏我只玩贪玩懒⽉");
      } else {
        console.log("来做我的兄弟");
      }
    }
    // 遍历对象,对其属性值进⾏劫持
    Object.keys(data).forEach(function(key) {
      Object.defineProperty(data, key, {
        enumerable: true,
        configurable: true,
        get: function() {
          console.log("get");
        },
        set: function(newVal) {
          // 当属性值发⽣变化时我们可以进⾏额外操作
          console.log(`⼤家好,我系${newVal}`);
          say(newVal);
        }
      });
    });
    data.name = "渣渣辉";
    //⼤家好,我系渣渣辉
    //戏我演过很多,可游戏我只玩贪玩懒⽉
    
    
    2019-11-24 12:47:55
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载