这只是将我的问题抛出来,期待我后期来修复。以面试题为例(此例跑不通)
vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
/*
* TODO
* 数据绑定问题,这就是mvvm框架的原理性东西。
* 会涉及到闭包,上下文的改变
* --------------------------------------------
* 深入一点地话会涉及到:
* 依赖收集?
*/
# 题目
有一个全局变量a,有一个全局函数b,实现一个方法bindData,执行后。
a的任何赋值都会触发b的执行
# 考点
1: 涉及到底层的方法就是get和set
2: defineProperty使用
3: 闭包
# 思路
1:
# 代码,但是这根本不能使用,我不知道怎么弄了
function bindData(target, event) {
for (var key in target) {
if (target.hasOwnProperty(key)) {
(function() {
var v = target[key]
// 给对象上的属性定义一些规矩
Object.defineProperty(target, key, {
get: function() {
return v
},
set: function(_value) {
v = _value
event.call(this) // 这里就是改变函数(event)的上下文了
}
})
})()
}
}
}
网友评论