其实学习vue最好的办法就是看vue的官方文档,因此我写这个主要是想记录下学习的心路历程[手动滑稽],顺便加深下印象。vue
因为 JavaScript 的限制,Vue 不能检测如下变更的数组:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength
// Vue.set Vue.set(vm.items, indexOfItem, newValue) // Array.prototype.splice vm.items.splice(indexOfItem, 1, newValue)
向响应式对象中添加一个属性,并确保这个新属性一样是响应式的,且触发视图更新。它必须用于向响应式对象上添加新属性,由于 Vue 没法探测普通的新增属性 (好比 this.myObject.newProperty = 'hi')api
注意对象不能是 Vue 实例,或者 Vue 实例的根数据对象。
咱们首先须要了解的是Vue 响应式原理的实现数组
Object.defineProperty 是仅 ES5 支持,且没法 shim 的特性,这也就是为何 Vue 不支持 IE8 以及更低版本浏览器的缘由。
到此,这个问题基本上就有答案了。浏览器
补充异步
Object.observe() 方法用于异步地监视一个对象的修改。当对象属性被修改时,方法的回调函数会提供一个有序的修改流。然而,这个接口已经被废弃并从各浏览器中移除。你能够使用更通用的 Proxy 对象替代。
Object.observe(obj, callback[, acceptList])函数
- callback 当对象被修改时触发的回调函数,其参数为:
changes 一个数组,其中包含的每个对象表明一个修改行为。每一个修改行为>的对象包含:学习
- name: 被修改的属性名称。
- object: 修改后该对象的值。
- type: 表示对该对象作了何种类型的修改,可能的值为"add", "update", or "delete"。
- oldValue: 对象修改前的值。该值只在"update"与"delete"有效。
- acceptList 在给定对象上给定回调中要监视的变化类型列表