英文翻译成中文没有办法特别精准的问题。 mutation 有 变异 的含义;所谓变异方法,就是指调用以后能改变调用者自身状态的方法。 除了 Array 的这几个方法外,别的 JavaScript 内置对象里也有变异方法我想了一圈,应该只有 Date 对象的 setFullYear() / setMonth() / setDate() 等等几个方法了。 这些方法有一个共同特性,就是当你调用 obj.XXXX() 以后,obj 本身发生了改变;而不是 obj 不变、却返回一个新对象(比如 String 的 replace())。 Vue 双向绑定的原理是利用了 Object.defineProperty 重写了 get / set,以达到当属性的值发生变化时来更新试图的;但这有个缺陷,就是如果不是直接修改的属性,而是调用了变异方法,那么 Vue 并不知道其值已经发生改变,此时需要手动调用 Vue.set 以通知 Vue。为了缓解这个问题,Vue 对 Array 的上述方法进行了包装。
英文翻译成中文没有办法特别精准的问题。
mutation
有 变异 的含义;所谓变异方法,就是指调用以后能改变调用者自身状态的方法。除了 Array 的这几个方法外,别的 JavaScript 内置对象里也有变异方法我想了一圈,应该只有 Date 对象的 setFullYear() / setMonth() / setDate() 等等几个方法了。
这些方法有一个共同特性,就是当你调用
obj.XXXX()
以后,obj
本身发生了改变;而不是obj
不变、却返回一个新对象(比如 String 的 replace())。Vue 双向绑定的原理是利用了
Object.defineProperty
重写了 get / set,以达到当属性的值发生变化时来更新试图的;但这有个缺陷,就是如果不是直接修改的属性,而是调用了变异方法,那么 Vue 并不知道其值已经发生改变,此时需要手动调用Vue.set
以通知 Vue。为了缓解这个问题,Vue 对 Array 的上述方法进行了包装。