Skip to content

思考题:特殊修改值情况 ​

本节目标:理解“思考题:特殊修改值情况”的核心思路,并能把它用于实际开发或面试表达。 如果数组通过索引给元素赋新值,不管新增是不是object类型,新值不会被截持; data() { return { name: "hello zf", arr: [{ name: "zf" }, 100, [1]] }; }, // {a:1}


不会被截持

vm.arr[1] = { a: 1 }; // [3,4]


这个数组的变异方法不会被改写

vm.arr[2] = [3, 4]; let vm = new Vue({ el: "#app", data() { return { name: "hello zf", arr: [{ name: "zf" }, 100] }; }, });

如果数组的索引指向的值是对象,对此对象的属性进行取值和改值会被拦截; //


这个操作走的是对象属性的改值逻辑

vm.arr[0].name = "jw";

如果数组索引指向的值是数组,且对这值使用变异方法进行操作,会调用我们改写的变异方法,也就是将新增的元素用数组包装,再对数组的每个元素调用observer方法,此时,如果是新增object类型的元素,这个元素会被截持; data() { return { name: "hello zf", arr: [{ name: "zf" }, 100, [1]] }; }, // push


进去的元素会被转换成数组

//


然后对数组的每一项进行循环调用`observer`方法

vm.arr[2].push(2);

本站总访问 — 次