js实现重写
实现方法一:使用 Function.prototype 重写方法
通过修改原型链上的方法实现重写。例如重写 Array.prototype.map:

const originalMap = Array.prototype.map;
Array.prototype.map = function(callback) {
console.log('重写后的 map 方法');
return originalMap.call(this, callback);
};
const arr = [1, 2, 3];
arr.map(x => x * 2); // 输出:重写后的 map 方法
实现方法二:使用 Object.defineProperty 重写属性
通过属性描述符控制可写性,适合重写对象属性或方法:

const obj = { value: 10 };
Object.defineProperty(obj, 'value', {
get() { return this._value * 2; },
set(newValue) { this._value = newValue; }
});
obj.value = 5;
console.log(obj.value); // 输出:10(getter 返回值的两倍)
实现方法三:代理模式(Proxy)
利用 Proxy 拦截对象操作,实现更灵活的重写:
const target = { name: 'Alice' };
const proxy = new Proxy(target, {
get(target, prop) {
if (prop === 'name') return `Proxy: ${target[prop]}`;
return target[prop];
}
});
console.log(proxy.name); // 输出:Proxy: Alice
实现方法四:继承与覆盖
通过类继承重写父类方法:
class Parent {
greet() { return 'Hello'; }
}
class Child extends Parent {
greet() { return `${super.greet()} World!`; }
}
const child = new Child();
console.log(child.greet()); // 输出:Hello World!
注意事项
- 原型链重写可能影响全局,需谨慎操作。
Proxy兼容性需检查(IE 不支持)。- 使用
Object.defineProperty时需注意configurable和writable配置。






