微信小程序修改浅拷贝对象,为何不会同步修改原对象?

各位大佬,我在做一个编辑购物车商品的逻辑,修改购物车前,先备份一下修改前的状态,但是在修改后保存时发现对 cart 的修改并不能同步到 this.data.cart 详细代码请见 27-31 行。

Page({
    edit: function (e) {
        let cart = this.data.cart;
        // 备份修改前的数据
        let CARTBAK = JSON.parse(JSON.stringify(cart));

        // 取消视口中的所有商品选中
        cart.isEditing = !cart.isEditing;
        if (cart.isEditing) {
            // 编辑
            console.log("开始编辑");
            cart.CARTBAK = CARTBAK;
            cart.isSelected = false;
            cart.shops.forEach((shop, index) => {
                shop.isSelected = false;
                shop.goodList.forEach((good, index) => {
                    good.isSelected = false;
                });
            });
        } else {
            // 编辑结束
            console.log("完成")
            if(e.target.id === "confirmDelete"){
                // 如果点的是 删除按钮,删除 备份数据里的商品
                confirmDelete();
            }
            // ↓ 这一行可以修改成功
            // this.data.cart = cart.CARTBAK;
            console.log(cart.CARTBAK)
            // ↓ 但是换成 cart 就不行
            cart = cart.CARTBAK;
            // cart 修改成功,this.data.cart 没有同步修改
            console.log(cart, this.data.cart)
        }
        this.saveData();

        function confirmDelete() {
            for (let i = cart.shops.length - 1; i >= 0; i--) {
                let goodList = cart.shops[i].goodList;
                for (let j = goodList.length - 1; j >= 0; j--) {
                    let good = goodList[j];
                    // console.log(good)
                    if (good.isSelected) {
                        cart.CARTBAK.shops[i].goodList.splice(j, 1);
                        // console.log(good)
                    }
                }
                if (cart.shops[i].isSelected) {
                    cart.CARTBAK.shops.splice(i, 1);
                }
            }
        }
    },

    saveData: function () {
        this.setData({
            cart: this.data.cart,
        });
        console.log("Saved")
    }
})
阅读 2k
1 个回答
✓ 已被采纳新手上路,请多包涵

let cart = this.data.cart => cart 指向 this.data.cart

cart = cart.CARTBAK => cart 指向 this.data.cart.CARTBAKthis.data.cart 不变

相关讨论:https://segmentfault.com/q/10...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题