数据绑定(mvvm原理)

2017-12-09  本文已影响0人  Egde

这只是将我的问题抛出来,期待我后期来修复。以面试题为例(此例跑不通)

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)的上下文了

}

})

})()

}

}

}

上一篇 下一篇

猜你喜欢

热点阅读