创建一个javascript类,模拟实现方法的重载
时间: 2023-05-21 18:02:41 浏览: 75
可以使用ES6的语法来实现方法的重载,具体代码如下:
class MyClass {
constructor() {
this.overloadedMethods = {};
}
addMethod(name, fn) {
if (this.overloadedMethods[name]) {
this.overloadedMethods[name].push(fn);
} else {
this.overloadedMethods[name] = [fn];
}
}
callMethod(name, ...args) {
const methods = this.overloadedMethods[name];
if (!methods) {
throw new Error(`Method ${name} not found`);
}
for (let i = 0; i < methods.length; i++) {
const method = methods[i];
if (method.length === args.length) {
return method(...args);
}
}
throw new Error(`No matching method found for ${name}`);
}
}
使用示例:
const myClass = new MyClass();
myClass.addMethod('foo', function() {
console.log('foo with no arguments');
});
myClass.addMethod('foo', function(a) {
console.log(`foo with argument ${a}`);
});
myClass.addMethod('foo', function(a, b) {
console.log(`foo with arguments ${a} and ${b}`);
});
myClass.callMethod('foo'); // logs "foo with no arguments"
myClass.callMethod('foo', 1); // logs "foo with argument 1"
myClass.callMethod('foo', 1, 2); // logs "foo with arguments 1 and 2"