はJavaScriptでinheritnaceと完全に混乱を理解しようと変数に割り当てられたjavascriptの匿名関数を継承する方法は?
私はちょうどDogCatがbark
とmeow
機能を持っていることを必要と継承チェーン内の各オブジェクトのthis
(何とか)にアクセスすることができ:
var cat = function() { this.name = "tom"; this.cat_instance = this; }
var dog = function() { this.name = "bob"; this.dog_instance = this; console.log("cat is here!");}
cat.prototype.meow = function() { console.log("mhew"); }
dog.prototype.bark = function() { console.log("whoof"); }
var DogCat = function() {
DogCat.prototype = dog.prototype;
DogCat.constructor = cat;
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
のでDogCat.prototype
現在dog
プロトタイプを指していて、DogCat
のインスタンスを指しています。少なくともbark
の機能を取得できますが、インスタンスにはこの機能がありません。 、そして、
var DogCat = function() {
cat.apply(this);
dog.apply(this);
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
犬にプロトタイプを指す:今
DogCat.prototype = dog.prototype;
var d = new DogCat();
> cat is here!
>my name is [object Object] [object Object]
オーケー
は、私が子供の両方に継承されたコンストラクタを適用し、今しようと思います(私の心の中で)混乱のthats私はbark
にアクセスできますが、meow
の処理方法は?プロトタイプチェーンを正しく構築するには?
プロトタイプの最初のルールは[コンストラクタ内で決して割り当てない]です(http://stackoverflow.com/q/21296559/1048572)。 JSプロトタイプの第2のルールは、「多重継承」(https://en.wikipedia.org/wiki/Multiple_inheritance)はありません。ごめんなさい。 – Bergi
これをクリアしていただきありがとうございます!複雑なアプリケーションを構築し、コードの重複を避ける方法を避ける方法は? 'DogCat.prototype.meow = cat.prototype.meow;'のようなプロトタイププロパティを再割り当てするだけです。 –
はい、単なる継承よりもコードの重複を避けるために、さらに多くのパターンがあります。あなたの状況に最も適したものはどれですか?実際のコードを表示すると、何かを提案することができます。 – Bergi