vue采用的是数据劫持结合发布和-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调.
数据劫持: 就是当我们获取或者设置对象的某个属性值的时候会调用一个对应的方法,通过这个方法来获取或者设置属性值,在调用这个方法时我们可以做一些奇奇怪 怪的事情,我们这个时候做的奇奇怪怪的事情就是数据劫持.
发布者: 当一个对象的状态发生改变时,或有一个人或事物或者程序来发出通知,这个人或事物或者程序就是发布者
订阅者: 发布者给谁发出通知呢,订阅者,什么是订阅者呢? 就是和这个对象有关系的,或者说调用了这个对象的方法,函数等,这些方法函数等就是订阅者
发布-订阅者模式: 又称"观察者模式",这个模式就是 当对象的状态发生改变时,发布者会给订阅者发送一个通知,说这个对象的状态改变了,你们给我注意哈
Object.defineProperty(): "会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。"这是官方文档上给出的解释,就是说调用这个方法可以对象给属性定义一个新的属性,但是如果你定义的这个属性名已经存在了不好意思,你只是修改对象的现有的一个属性,return一个修改后的对象.我们现在来说一下这个方法的几个参数: obj 要在其上定义属性的对象。prop 要定义或修改的属性的名称。descriptor 将被定义或修改的属性描述符(什么是属性描述符:它分为数据描述符(什么是数据描述符: 具有值的属性这些值是可以修改的,这个都有什么可以自己去查一下:configurable,enumerable,vakue,writable)和存取描述符(什么是存取描述符:就是get和set))。
set: 一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。默认为 undefined。
get: 一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。默认为 undefined。
监听: "采取比较隐蔽的手段或设备等技术手段,对相应的声音或事态的发展进行探听的一种行为。世界上最早的窃听器是2000年前中国发明的。现在常用的有手机监听器、网络监听及专业监听器等。"这是百度百科给出的解释.要我说及就是相当于你24小时被人看着.你在做某一件事情的时候,或问你,你干嘛呢,谁让你这么干的,你不应该这么干,你应该这么干
回调: 打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function).
这个答案是知乎上面的,生动且形象.(作者:no.body 链接:www.zhihu.com/question/19…, 来源:知乎)
vue采用的是数据劫持结合发布和-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调.
好嘛,双向绑定就是上面的结合体,好家伙团伙作案.
最后来一张CSDN的图