发表于: 2017-02-25 01:44:01

0 1219


今天完成的事情:

做了几个任务:[

自定义checkbox、radio样式;

自定义网页右键菜单;

正则表达式之入门;

使用ECharts图表;

动态数据绑定;]

又看了一遍js对象的教程;
明天计划的事情:

继续完成动态数据绑定二;

看犀牛书;
遇到的问题:

// 观察者构造函数
function Observer(data) {
this.data = data;
   this.walk(data);
}
let p = Observer.prototype;
// 此函数用于深层次遍历对象的各个属性
// 采用的是递归的思路
// 因为我们要为对象的每一个属性绑定getter和setter
p.walk = function (obj) {
let val;
   for (let key in obj) {
// 这里为什么要用hasOwnProperty进行过滤呢?
       // 因为for...in 循环会把对象原型链上的所有可枚举属性都循环出来
       // 而我们想要的仅仅是这个对象本身拥有的属性,所以要这么做。
       if (obj.hasOwnProperty(key)) {
val = obj[key];
           // 这里进行判断,如果还没有遍历到最底层,继续new Observer
           if (typeof val === 'object') {
this.convert(key,val);
               this.convert(key, val);
               if (typeof val === 'object') {
new Observer(val)
}
new Observer(val);
           }
this.convert(key, val);
       }
}
};

p.convert = function (key, val) {
Object.defineProperty(this.data, key, {
enumerable: true,
       configurable: true,
       get: function () {
if(typeof key === 'object')
{
console.log(key);
           }
console.log('你访问了' + key);
           return val
},
       set: function (newVal) {
if (typeof newVal === 'object') {
new Observer(newVal)
}
console.log('你设置了' + key);console.log('新的' + key + ' = ' + newVal);
           if (newVal === val) return;
           val = newVal
}
})
};

还要在此基础上添加代码,实现一个$watch功能,发现自己基础不足,仅仅看懂、做一点小改动都很吃力,做起来挺费劲的。决定在有别的想法前,先把js提高,只有啃出来的才是竞争力,只是使用工具连猴子都会。

收获:

函数返回值取决于return语句,一般的函数如果没有return的话返回的是undefined,如果是构造函数的话如果没有return或者return基本类型则返回this,如果是返回对象的话,则是函数作为new这个构造器的返回值;

使用bind可以柯里化,部分传参;

正则分组后加上\n表示重复对应的分组n次


返回列表 返回列表
评论

    分享到