js override 实现
方法一:使用原型链继承实现方法重写
通过修改对象的原型链,可以在子类中覆盖父类的方法。这是 JavaScript 中最常见的 override 实现方式。
function ParentClass() {
this.method = function() {
return 'Parent method';
};
}
function ChildClass() {
this.method = function() {
return 'Child method';
};
}
ChildClass.prototype = new ParentClass();
const instance = new ChildClass();
console.log(instance.method()); // 输出 "Child method"
方法二:使用 ES6 class 语法实现方法重写
ES6 的 class 语法提供了更清晰的方法重写方式,使用 extends 和 super 关键字。
class Parent {
method() {
return 'Parent method';
}
}
class Child extends Parent {
method() {
return 'Child method: ' + super.method();
}
}
const child = new Child();
console.log(child.method()); // 输出 "Child method: Parent method"
方法三:直接修改对象实例方法
对于已存在的对象实例,可以直接修改其方法实现覆盖。
const obj = {
method: function() {
return 'Original method';
}
};
// 覆盖原有方法
obj.method = function() {
return 'Overridden method';
};
console.log(obj.method()); // 输出 "Overridden method"
方法四:使用 Object.defineProperty 实现属性重写
通过属性描述符可以更精细地控制方法覆盖行为。
const obj = {
method: function() {
return 'Original method';
}
};
Object.defineProperty(obj, 'method', {
value: function() {
return 'Overridden via defineProperty';
},
writable: true,
enumerable: true,
configurable: true
});
console.log(obj.method()); // 输出 "Overridden via defineProperty"
方法五:使用 Proxy 实现方法拦截
ES6 Proxy 可以提供更高级的方法覆盖和拦截能力。
const target = {
method: function() {
return 'Original method';
}
};
const handler = {
get(target, prop) {
if (prop === 'method') {
return function() {
return 'Proxied method';
};
}
return target[prop];
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.method()); // 输出 "Proxied method"





