私がやろうとしているのは、階層内の各オブジェクトが独自のプロパティ セットを持つ Javascript で単純なオブジェクト階層を作成すると同時に、新しく作成されたオブジェクトで instanceof を使用できるようにすることです。つまり、基本オブジェクト (以下の Person を参照) に実際に firstName プロパティと lastName プロパティを含めたいと考えました。最終的に、すべてのプロパティが同じ「これ」にマッシュされることは望んでいませんでした。私は素敵できちんとした真のオブジェクト階層が欲しいです。
これを行うには、これが正しいアプローチだと思いましたが、間違っているようです:
var Person = function (firstName, lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
var Ninja = function (beltColor)
{
this.beltColor = beltColor;
}
Ninja.prototype = new Person ("George", "Clooney");
var ninja1 = new Ninja ("Black");
Ninja.prototype = new Person ("Scarlett", "Johansson");
var ninja2 = new Ninja ("Blue");
Ninja.prototype = new Person ("Brad", "Pitt");
var ninja3 = new Ninja ("Green");
console.log (ninja1 instanceof Ninja); // false
console.log (ninja1 instanceof Person); // true
console.log (ninja2 instanceof Ninja); // false
console.log (ninja2 instanceof Person); // true
console.log (ninja3 instanceof Ninja); // true
console.log (ninja3 instanceof Person); // true
上記のコード (私の考えでは) は、Ninja コンストラクターを使用して 3 つのメイン オブジェクトを効果的に作成し、結果のninja1.__proto__, ninja2.__proto__ and ninja3.__proto__
オブジェクトには firstName/lastName プロパティが含まれます (これが必要です)。これらの __proto__ オブジェクトも「タイプ」Person になります。これらは Person コンストラクターで作成されたものであり、ninja1、ninja2、および ninja3 オブジェクトは「Ninja」タイプ (またはそう思った) です。コンストラクタ。
Person コンストラクターを介して新しく作成されたオブジェクトに Ninja.prototype を再割り当てすることは、instanceof
オペレーターのスローであることを理解していますが、私の人生では、その理由はわかりません。
だから私は2つの質問があります:
1) Person コンストラクターを介して新しく作成されたオブジェクトに Ninja.prototype を再割り当てすると、instanceof
オペレーターがスローされるのはなぜですか?
2) 私がやろうとしていることを行うための正しいアプローチは何ですか? 言い換えれば、プロパティが階層のさまざまなレベルにある単純なオブジェクト階層を作成し、instanceof
意味のある方法で使用することもできますか?