请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么代理过的数据还是会被sort()修改掉呢;如果写法有问题,希望老师给出正确写法

let obj = {
    name: 'jack',
    arr: [1, 3, 2]
}
let pro = new Proxy(obj, {
    get(target, key) {
        if (key === 'arr') {
            return target[key] = target[key].sort()
        }
    }
})
console.log(obj.arr, '源数据1') //1 3 2
console.log(pro.arr, '代理数据')//1 2 3
console.log(obj.arr, '源数据2') //1 2 3 

正在回答 回答被采纳积分+3

2回答

慕UI9336467 2020-07-28 11:08:54
let o = {
    name: "wang",
    plan: [1, 6, 3, 4, 2]
};

let p = new Proxy(o, {
    get(target, p) {
        if (p === "plan"){
            return [].concat(target[p]).sort();
        }else {
            return target[p];
        }
    }
});

这样没问题

0 回复 有任何疑惑可以回复我~
慕粉1926294646 2020-06-12 22:51:21

同学你在proxy中还是操作的target[key],这个是数组,数组是引用类型所以会改变呀。let pro = new Proxy(obj, {
   get(target, key) {
       if (key === 'arr') {
           return target[key] = [].concat(target[key]).sort()
       }
   }
})

0 回复 有任何疑惑可以回复我~
  • 提问者 小马1992 #1
    这种方法和我的那种写法最终的结果还是一样的啊,我的意思是 想让数据源2是 【1,3,2】,印证之前课程中一键重置的那种效果,
    回复 有任何疑惑可以回复我~ 2020-06-15 11:23:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信