js基础编程-题目20

整理下初学时做过的js基础编程题目和大家分享以下,如果大家觉得有用,别忘了点一下赞哦

proxy

写一个方法,实现arr[-1] = arr[arr.length-1]
const arr = createArr(1,2,3)
console.log(arr[-1])//3

方法:使用数据代理 proxy 实现

function createArr(...args){
    
    
  let arr = Array.of(...args)
  return new Proxy(arr,{
    
    
    get(_,key){
    
    
      key = key < 0 ? arr.length + Number(key) : key ;
      return arr[key]
    }
  })
}

这里扩展下

  • Object.definePropertyproxy的区别
    前者不能对未知属性继续监听,而后者可以。
    比如上面这题用Object.defineProperty就实现不了,因为 负数索引不是数组的属性
    前者如果不用数据劫持(用另一个对象监听这个对象),就会栈溢出,而后者则没有这个问题

猜你喜欢

转载自blog.csdn.net/hr_beginner/article/details/121327137