vue重写数组的7个方法
const arrayProto = Array.prototype// 拿到数组的原型对象const arrayMethods = Object.create(arrayProto)// 通过Object.create,创建一个新的原型对象// 这样做的目的是为了不污染array原来的原型对象const methodsToPatch = ['push', 'pop', 'unshift', 's
·
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
}
更多推荐
已为社区贡献4条内容
所有评论(0)