那麼如何在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
。我跟蹤了這個bug,結果發現,當SuperClass.prototype.foo
正在執行時,SubClass.prototype
仍然是undefined
。
那麼,什麼是正確的方法來做到這一點?謝謝!
我剛剛意識到這是一個愚蠢的問題,但仍然感謝您的回答! – user3928256
甚至更重要的是,通過使用'this.bar()''bar()'中的作用域將被設置爲當前實例而不是原型對象。當你訪問'this'的屬性時,這很重要,當你修改它們時更重要。 – Thomas
@Thomas,說得好!我忘了提到這一點。 – Dimos