js实现监听数组方法,可设置监听数组或者属性是否调用或其他逻辑处理

**需求:**对日常的数组方法进行使用的时候,我们可能有需求在某些方法进行调用的时候做一下逻辑处理,可是如何才能监听该方法调用的时候进行逻辑处理呢?

**实现:**我们知道数组的方法是在数组的原型链上的,只要变量/常量的类型被定义为数组,它的原型链上就会有数组的方法,那么我们需要监听数组的方法或者属性,就需要重写一下数组的方法。

  1. 需要重写数组方法,我们首先需要获取到数组的方法,而方法在原型上,我们就先从原型上获取到所有数组内置的方法和属性。

  2. 我们知道数组的原型是个数组,所以定义一个新数组,来获取我们重写后的数组方法;

  3. 遍历获取数组原型上的所以属性及方法,筛选出方法/属性,进行对应的监听处理。

const arrayProtoType = Object.create(Array.prototype)
// 创建一个新的原型,这就是改造之后的数组原型
const ArrayProto = []
// 重新构建Array原型里面的虽有方法
Object.getOwnPropertyNames(Array.prototype).forEach(key => {
// console.log(key)
if (typeof arrayProtoType[key] === “function”) {
ArrayProto[key] = function () {
listenMethods(key);
return arrayProtoType[key].apply(this, arguments)
}
} else {
listenProps(key)
ArrayProto[key] = arrayProtoType[key]
}
})

function listenMethods(method){
console.log(${method}触发了);
// 其他你需要监听的逻辑
}

function listenProps(prop){
console.log(${prop}触发了);
// 其他你需要监听的逻辑
}

let list = []
// 将数组的原型链指向新构造的原型
list.proto = ArrayProto
// 执行push事件
list.push()
list.join()
list.length

复制代码
效果如下:

作者:慕容望舒
链接:https://juejin.im/post/6888090218679762951/
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值