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

来源:2-51 Schema Validation(2)

小马1992

2020-05-26

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 
写回答

2回答

慕UI9336467

2020-07-28

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
0

慕粉1926294646

2020-06-12

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

0
1
小马1992
这种方法和我的那种写法最终的结果还是一样的啊,我的意思是 想让数据源2是 【1,3,2】,印证之前课程中一键重置的那种效果,
2020-06-15
共1条回复

再学JavaScript ES(6-10)全版本语法大全

前端无门槛学习,从ES6到ES10,一套课程掌握JS最新语法

1182 学习 · 336 问题

查看课程