私は(「Javascriptを:良い部品」からコピーブック):新しいオブジェクトの作成時に、私はプロトタイプオブジェクトを選択できるようになる方法持っている今、私は、オブジェクトを持っている、と言うJavaScriptのプロトタイプの動作
Object.create = function(o) {
var F = function() {};
F.prototype=o;
return new F();
}
を:
var car = {
model: "Nissan"
};
そして私は、 "作成" 方法使用して、このオブジェクトに基づいて新しいオブジェクトを作成します。
var car1 = Object.create(car);
を私は車にプロパティを追加することができ、動的にcar1(動的プロトタイピング)に追加されます。だから、例えばのため:
car.year=2011; // Gets added to "car"...
alert(car1.year); // ... Is also avaialable to car1
Q1)この動作は、「年」、それはCAR1に利用可能である理由である車のプロトタイプに追加しまったことを示しています。これは正しいです?そうでない場合、「年」はどこに追加され、なぜ「車」と「car1」の両方に利用できるのですか?
また、オブジェクトのメソッドが見つからない場合は、そのプロトタイプを検索し、Object.prototypeに到達するまでチェーンのすべてのプロトタイプをチェックします。だから、私はこのようなものを入力すれば:
Object.prototype.originCountry = "Japan";
alert(car.originCountry); // Outputs Japan
alert(car1.originCountry); // Outputs Japan
それほど良い;しかし、私がしなければ:
Object.carColor= "White";
alert(car.carColor); // Error!
Q2)私は「車」(上記 car.year例を参照するプロパティを追加すると、それは車のプロトタイプに追加されますしかし、私はにプロパティを追加する場合。オブジェクトは、それはそれはのプロトタイプオブジェクトに追加されますない場合は?Prototypeのをオブジェクトに追加されません、なぜ代表団のルールごとに、「車」にも使用できません?
は、なぜこの起こっているのでしょうか?
私は、プロトタイプ上にプロパティが作成され、オブジェクト自体からそれらを作成しようとすると、彼は未定義をスローし、そのプロトタイプで作成されたすべての要素それを継承する。 –
あなたのQ2が間違っているから始まり:あなたはcar'のプロトタイプ 'には何も追加しなかった、あなたはこれは私がしようとしているものです – searlea