对象变化侦测原理(三)

三、Array 数组侦测

数组 Array 虽然也是属于对象类型,但还是存在一些差别,它没办法像 Object 对象那样,通过 setter/getter 的方式来监听属性的变化,因此对于 Array 而言,需要用到另外一套变化侦测方案。

3.1 如何追踪变化

我们知道,Array 数组有很多个内置方法可以改变数组的值,比如 push,pop,shift等,这些方法都可以改变数组的内容,所以可以尝试通过监听这些方法的调用,来达到监听数组变化的目的。

但是,这些方法都是内置方法,而且 js 中并没有提供接口给我们覆盖,因此要如何修改这些方法,以达到我们需要的效果呢?

 对象变化侦测原理(二)

二、Object 变化侦测

变化侦测指的是,当运行时的状态发生变化时,应用程序可以知道哪个状态发生了变化,并作出相应的动作。

变化侦测的方式可以分为2种:一种是“推(push)”,一种是“拉(pull)”。

Vue 的变化侦测就属于“推,当状态发生变化时,它就会通知相应的依赖对象进行更新。

2.1 追踪变化

 对象变化侦测原理(一)

变化侦测原理

一、对象属性

对于 js 对象的属性,可以分为2种:数据属性和访问属性。

1.1 数据属性

数据属性就是普通的对象属性值,可以读入和写入值。

例如,下述的属性 data 就是数据属性:

1
2
3
4
var obj = {};
obj.data = 'data';

alert(obj.data) // "data"

对于数据属性,它有4个特性: