2016-03-20 7 views
2

私はJavascriptプロトタイプを拡張するには?

new Product.Image({ 
     "title": document.querySelector('#image-title') 
    }); 

と私のテンプレートから機能をインスタンスしかし、今、私は「Product.Image」などを拡張する必要があります"Product.BetterImage"

new Product.BetterImage({ 
     "title": document.querySelector('#better-image-title') 
    }); 

で私の元のクラスは次のように起動します:

Product.Image = function (options) { 
    //do something 
} 
Product.Image.prototype = new Product.Data(); 

は今、私は "Product.Image" を拡張し、それをコピーしよう:

Product.BetterImage = function (options) { 
    //do something 
} 
Product.BetterImage.prototype = new Product.Image(); 

しかしときテンプレートを呼び出して起動します。次のエラーが表示されます。

Uncaught TypeError: Product.BetterImage is not a constructor 

私はここで何が間違っているのか、何が間違っていますか? 誰も私に何が間違っているのか説明できますか?

答えて

1

これはjavascriptの継承とプロトタイプの代表団に関係している - この良いMDNページを参照してください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

あなたのコードのこの部分は、必要に応じて、問題の原因とされていません。

Product.Image = function (options) { 
    //do something 
} 
Product.Image.prototype = new Product.Data(); 

への正しい方法をこれは、 'Product'クラスを作成してPrototypeに直接追加することです:

var Product = function(data) { 
    this.data = data; 
} 

Product.prototype.image = function() { 
    // return data here 
} 

Product.prototype.better = function(){ 
    // add stuff here 
} 

Product.prototype.betterImage = function(){ 
    // add more stuff here 
} 

次にインスタンスまたはインスタンスを作成するあなたのクラスには、 'new'キーワードを使用することができます

var myProduct = new Product(data); 
+0

しかし、 "Product.BetterImage"で "Product.Image"をどのように拡張できますか?私は "Product.BetterImage"内の "Product.Image"のすべてのメソッドを使用したいが、それを使って1つまたは2つのメソッドをオーバーライドする。 – Tipo

+1

上記のコードでは、betterImageに入れたメソッドはすべて元のProduct.prototypeに戻されます。 製品のプロトタイプを拡張したい場合は、おそらく新しいクラスを作る時間です...ドキュメントを読みましたか?これを行うにはいくつかの方法があります。ヒント:ドキュメントを見て、一番下の例を見つけてください - あなたの探しているもの – JordanHendrix

関連する問題