ife 2017 -vue部分 任务一 数据绑定

任务详情:

实现这样的一个 Observer,要求如下:

传入参数只考虑对象,不考虑数组。
new Observer返回一个对象,其 data 属性要能够访问到传递进去的对象。
通过 data 访问属性和设置属性的时候,均能打印出右侧对应的信息。

参考资料:https://github.com/youngwind/blog/issues/84,
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

代码如下:

var Observer = function(dataObj) {
    this.data = dataObj;
    this.walk(dataObj);
};

//遍历要观察的对象属性

 Observer.prototype.walk = function (object) {

var value;

for (var key in object) {
    if (object.hasOwnProperty(key)) {
        value = object[key];
        //判断属性的value类型,如果仍然是object,就调用递归算法
        if (typeof value ==="object") {
            new Observer(value);
        };

        //将值传给convert函数
        this.convert(key,value);
    }
  }
}

Observer.prototype.convert = function (key,value) {
  Object.defineProperty(this.data,key,{
      enumerable: true,
      configurable: true,
      get:function() {
          console.log('正在访问'+key+'属性');
          return value;
      },
      set:function(newValue){
          console.log('正在设置'+key+'属性');
          console.log('属性值为'+ newValue);
          if(newValue === value){
              return;
          }
        value = newValue
      }
  });
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容