响应式编程的核心思想是观察者模式,被观察的对象我们可以称之为数据源,所以,数据是响应式编程所关注的核心。
假设有一个数据对象,有一个字段age值为18:
let obj = {
age:18
}
然后有一个函数,在这个函数打印age字段:
function fn(){
console.log(obj.age);
}
fn();//18
现在我们想当我们修改age字段值时,fn函数能够自动执行。
那要怎么实现呢?
有这样一种思路是:当age字段被读取的时候,我们记住是什么函数读取了它;在给age字段设值的时候,我们拿出记录的函数并调用它。这样我们每次修改age的时候就会自动执行相关函数了。
下面我们按这种思路具体实现一下:
首先,这里面涉及到三个角色:1、数据对象 2、数据字段 3、副作用函数(在函数内部修改了函数外部的数据),它们的关系如下:
对象
|__字段1
| |__副作用函数1
|
|__字段2
|__副作用函数1
|__副作用函数2
然后,我们需要对obj数据对象字段的读取和写入操作进行劫持以达到我们记录和调用副作用函数的目的,这里我们通过js中的Proxy来代理obj对象的get和set属性。
我们先来看一下简单版代码,