プロトタイプの参照プロパティをその子の間で共有するという問題にどのように対処しますか? この問題を解決するためのよく知られたパターン (コンストラクター内でプロパティを再定義する以外) はありますか? これはまったく問題ですか、それともプロトタイプの継承について私が見逃していることがありますか?
例:
var dog =
{
name: "no-name",
paws: ["front-right", "front-left", "back-right", "back-left"]
};
var rex = Object.create(dog);
rex.name = "Rex";
var bingo = Object.create(dog);
bingo.name = "Bingo";
bingo.paws.pop(); //Bingo is just like a dog, but has lost a paw in a tragic accident
console.log(bingo.paws); //["front-right", "front-left", "back-right"]
console.log(rex.paws); //Rex lost a paw too! ["front-right", "front-left", "back-right"]
アップデート:
プロトタイプの継承について学習した後、このパラダイムでのプログラミングの「自然な」方法は、オブジェクトを拡張することであり、「クラス」として使用するという意味でコンストラクターにあまり依存しないように思えます。私がブログで見た例 (また、Douglas Crockford のものとも一致しているようですObject.create
) は、多かれ少なかれ次のようなものでした。
var Dog =
{
name: "no-name",
paws: ["front-right", "front-left", "back-right", "back-left"],
bark: function() { alert("Bark!!"); }
};
//No constructor acting like a "class"
var BigDog = Object.create(Dog);
BigDog.bark = function() { alert("WOLF!!!"); };
var thor = Object.create(BigDog);
thor.name = "Thor";
thor.bark();
新しいインスタンスで新しい配列をコピーまたは作成する唯一の方法はコンストラクターですか? Object.create
これが「未完成」のパターンでしょうか。
答えてくれてありがとう!