У меня есть абстрактный класс, который реализует некоторые методы на его прототипе, и я хочу создать экземпляр непосредственно из этого класса без его подкласса.
Я могу создать экземпляр этого класса, создав Proxy
и перехватив construct
, и, похоже, он работает. Свойства нового экземпляра установлены правильно, но мне трудно вызывать его методы.
function AbstractNumbers(...args) {
if (new.target === AbstractNumbers) {
throw new Error('Cannot instantiate abstract class');
}
this.numbers = args;
}
AbstractNumbers.prototype.showNumbers = function() { console.log(this.numbers); }
const AbstractNumbersProxy = new Proxy(AbstractNumbers, {
construct(target, args) {
// change 3rd argument to bypass new.target test
return Reflect.construct(target, args, function() {});
}
});
const n = new AbstractNumbersProxy(1, 2, 3);
// set prototype back to AbstractNumbers
Object.setPrototypeOf(n, AbstractNumbers);
// n.__proto__ shows the correct prototype
console.log(n.__proto__);
// property n.numbers is set correctly
console.log(n.numbers);
// calling its prototype method fail
n.showNumbers();
Как правильно создать экземпляр этого абстрактного класса, чтобы я мог вызывать его методы?