该如何侦测数组中元素的变化?

如题所述

如何侦测数组的变化,指的是数组自身的变化,比如是否新增一个元素,是否删除一个元素等。其实数组中保存了一些元素,它们的变化也是需要侦测的。比如,当数组中object身上某个属性的值发生了变化时,也需要发送通知。此外,如果用户使用了push往数组中新增了元素,这个新增元素的变化也需要侦测。
也就是说,所有响应式数据的子数据都要侦测,不论是object中的数据还是Array中的数据。前面介绍0bserver时说过,其作用是将object的所有属性转换为gteresetter的形式来侦测变化。现在0bserver类不光能处理0bject类型的数据,还可以处理Array类型的数据。Array追踪变化的方式和 object不一样。因为它是通过方法来改变内容的,所以我们通过创建拦截器去覆盖数组原型的方式来追踪变化。
为了不污染全局Array. prototype,我们在0bserver中只针对那些需要侦测变化的数组使用_proto_来覆盖原型方法,但_proto_在ES6之前并不是标准属性,不是所有浏览器都支持它。因此,针对不支持_proto_属性的浏览器,我们直接循环拦截器,把拦截器中的方法直接设置到数组身上来拦截Array . prototype 上的原生方法。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网