const arrayProto = Array.prototype
// 拿到数组的原型对象
const arrayMethods = Object.create(arrayProto)
// 通过Object.create,创建一个新的原型对象
// 这样做的目的是为了不污染array原来的原型对象
const methodsToPatch = ['push', 'pop', 'unshift', 'shift', 'splice', 'sort', 'reverse']
// array数组,这7种方法是终会改变数组本身。
methodsToPatch.forEach(method => {
// 通过代理,重新返回一个额新的函数
Object.defineProperty(arrayMethods, method, {
value: function (...args) {
// 通过apply,实现数组方法原有的功能
return arrayProto[method].apply(this, args)
},
configurable: true,
writable: true,
enumerable: true
})
})
export default function protoArguments(arr) {
// 覆盖数组原有的原型对象
arr.__proto__ = arrayMethods
}
vue重写数组的7个方法
最新推荐文章于 2024-07-08 11:41:14 发布