监测数组变化,并返回数组长度
// 获取Array的原型,并创建一个新的对象指向这个原型
// const arrayMethods = Object.create(Array.prototype)
// 创建一个新的原型,这就是改造之后的数组原型
const ArrayProto = []
// 重新构建Array原型里面的虽有方法
Object.getOwnPropertyNames(Array.prototype).forEach(method => {
if (typeof Array.prototype[method] === "function") {
ArrayProto[method] = function () {
console.log("我已经监听到数组触发了" + method + "事件")
let len = this.length
let result = Array.prototype[method].apply(this, arguments)
console.log(len, this.length);
if (len !== this.length) return this.length
return result
}
}
})
let list = [1, 2, 3]
// 将数组的原型链指向新构造的原型
list.__proto__ = ArrayProto
// 执行push事件
console.log(list.push(2), list.pop(2), list.slice(2), list.unshift(2));