Так как использовать абстрактный метод фабрики в JavaScript? Например, в Java:Как реализовать абстрактный метод фабрики в JavaScript?
public abstract class SuperClass {
abstract String bar();
public String foo() {
return bar();
}
}
public class SubClass extends SuperClass{
@Override
String bar() {
return "bar";
}
}
public class Test {
public static void main(String[] args) {
System.out.println(new SubClass().foo());
}
}
Это показывает bar
и просто отлично. Но когда я попробовал это в JavaScript:
var SuperClass = function() {};
SuperClass.prototype.foo = function() {
return this.prototype.bar();
};
var SubClass = function() {};
SubClass.prototype = Object.create(SuperClass.prototype);
SubClass.prototype.constructor = SubClass;
SubClass.prototype.bar = function() {
return "bar";
};
var myClass = new SubClass();
console.log(myClass.foo());
Я получаю Uncaught TypeError: Cannot read property 'bar' of undefined
. Я отслеживал ошибку и получается, когда SuperClass.prototype.foo
выполняется, SubClass.prototype
по-прежнему undefined
.
Итак, каков правильный способ сделать это? Спасибо вам!
Я только понимаю, что это глупый вопрос, но все же спасибо за ответ! – user3928256
и, что еще важнее, с помощью 'this.bar()' scope в 'bar()' будет установлен в текущий экземпляр вместо объекта-прототипа. Это может быть важно при доступе к свойствам 'this', и даже более важно, когда вы их модифицируете. – Thomas
@ Томас, хорошо сказано! Я забыл упомянуть об этом. – Dimos