3

次の例では、createProduct 関数が上書きされることを期待しています。しかし、結果はエラーです。

var AbstractFactory = function(){
  this.createProduct = function(){
    throw new Error("The createProduct() method has not been implemented.");
  }
}

AbstractFactory.prototype.createProduct = function(){
  console.log('The method has been overwriten successfully');
};

var factory = new AbstractFactory();
factory.createProduct();
4

3 に答える 3

1

問題は、JavaScript には抽象化のようなものがないことです。必要なものを実装できる 1 つの方法は、よりモジュール化されたアプローチを使用することです。ファクトリ オブジェクトを作成するときに、createProduct 関数をオーバーライドする関数を AbstractFactory 関数に渡すことができます。

var AbstractFactory = function(func){
  this.createProduct = func || function(){
    throw new Error("The createProduct() method has not been implemented.");
  }
}


var factory = new AbstractFactory(function() {
  console.log('The method has been overwriten successfully');
});
factory.createProduct();  // The method has been overwriten successfully

funccreateProduct に割り当てる前に、関数であることを最初に確認することもできます。

于 2013-08-07T17:14:22.027 に答える
0

少し役立つ別の例:

オブジェクトを実装する構成を使用してオーバーライドします。

var AbstractFactory = function(config){
  this.init(config)
}

AbstractFactory.prototype ={
createProduct : function(){
    console.log('The method has been overwriten successfully');
},
init : function(config){
    console.log("Start my object")
    if(typeof config.createProduct === "function"){
        this.createProduct = config.createProduct;
    }
}
}
var myConfig = {
createProduct : function(){
    throw new Error("The createProduct() method has not been implemented.");
}   
}
var factory = new AbstractFactory(myConfig);
factory.createProduct()
于 2013-08-07T17:18:35.300 に答える