发表于: 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次
评论