js 实现重写
重写方法的基本实现
在JavaScript中,可以通过修改对象的属性或方法来覆盖原有的实现。例如,重写一个对象的方法:
const obj = {
originalMethod: function() {
console.log('Original implementation');
}
};
obj.originalMethod = function() {
console.log('Rewritten implementation');
};
使用原型链重写
对于构造函数或类的实例方法,可以通过修改原型链来实现重写:

function MyClass() {}
MyClass.prototype.method = function() {
console.log('Original method');
};
// 重写原型方法
MyClass.prototype.method = function() {
console.log('Overridden method');
};
ES6类方法重写
使用ES6类语法时,可以通过继承和super关键字实现方法重写:

class Parent {
method() {
console.log('Parent method');
}
}
class Child extends Parent {
method() {
super.method(); // 调用父类方法
console.log('Child method');
}
}
函数包装实现重写
通过保存原函数引用,可以实现装饰器模式的重写:
const originalFunction = someFunction;
someFunction = function(...args) {
console.log('Before original function');
const result = originalFunction.apply(this, args);
console.log('After original function');
return result;
};
使用Proxy实现高级重写
Proxy对象可以创建对象的代理,用于重写基本操作:
const target = {
message: 'hello'
};
const handler = {
get(target, prop) {
if (prop === 'message') {
return 'world';
}
return target[prop];
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.message); // 输出"world"而不是"hello"






