• 5
  • 新人请关照

Object.defineProperty() 监听数组,使之不可修改

现在有一个数组,现在想要通过Object.defineProperty()对这个数组进行监听,让它不能被修改。下面是自己写的代码,

  var dearr = [1, 2, 3, 4, 5];
    function deArr(arr) {
        for (var i = 0; i < arr.length; i++) {
            Object.defineProperty(arr, i, {
                set: function () {
                    return false
                }
            })
        }
        return arr
    }
    deArr(dearr)

我这边的思路是循环,如果是对象的话,就递归处理 。写了好几个版本,都是各种错误,
请问如果要想对数组 或者对象使用Object.defineProperty()监听,使之 不可修改,该怎么操作呢,谢谢

阅读 108
评论
    1 个回答

    只是为了“使数组不能被修改”可以:

     var dearr = Object.freeze([1, 2, 3, 4, 5]);

    如果要“进行监听”,Object.defineProperty有点无能为力吧,可以使用Proxy处理:

    var dearr = [1, 2, 3, 4];
    var dearrProxy = new Proxy(dearr, {
        set: function(arr, index, value) {
            console.log(`Try to arr[${index}]=${value}`)        
        }
    })
    
    dearrProxy[1] = 10;
    dearrProxy[9] = 1;
    
    console.log(dearr)
      撰写回答

      登录后参与交流、获取后续更新提醒