JavaScript监听对象属性的改变

目前监听JS中的变量变化的方法很多,流行的MVVM的JS库/框架的共同特点就是数据绑定, 在数据变更后响应式的自动进行相关计算并变更DOM展现

常见的监听方法

1. 基于ES5的getter和setter

在ES5中新增了一个Object.defineProperty, 直接在一个对象上定义一个新属性, 或者修改一个已存在的属性,并返回这个对象。

参数
obj
要在其上定义属性的对象。
prop
要定义或修改的属性的名称。
descriptor
将被定义或修改的属性描述符。

当我们给obj的data赋值的时候,就会触发set 的方法

如果要一下子定义多个变量的getter和setter,你可以使用Object.defineProperties(obj,props)

参数
obj
要在其上定义属性的对象。
props
要定义其可枚举属性或修改的属性描述符的对象。

2. 脏值检测

脏值检测原理就是比较新值和旧值, 当值真的发生改变时再去更改DOM,目前Angular使用脏值检测

缺点是如果不注意,每次脏值检测会检测大量的数据, 而很多数据是没有检测的必要的,容易影响性能。

3. ES6的Proxy

类似HTTP中的代理:

target
用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
handler
一个对象,其属性是当执行一个操作时定义代理的行为的函数。

示例:当对象中不存在属性名时,缺省返回数为37

示例:通过代理,验证向一个对象的传值

(来源于:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy

关于稚子

你们眼中的草根
此条目发表在BS架构后台语言分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注