2012-03-28 5 views
0

は、だから私は「雄弁のJavascript」からいくつかのコードを見ていることだし、それはあなたのような関数を書くかもしれない継承を引き起こすことを言う:プロトタイプをコピーするには新しいオブジェクトが必要ですか? JavaScriptの

function clone(object) { 
    function OneShotConstructor() {} 
    OneShotConstructor.prototype = object; 
    return new OneShotConstructor(); 
} 

とクラスTerrariumはすでにだった場合、そのようにそれを呼び出します定義された:私たちはそのプロトタイプをコピーするためにOneShotConstructorを作成する必要がある理由

function LifeLikeTerrarium(plan) { 
    Terrarium.call(this, plan); 
} 
LifeLikeTerrarium.prototype = clone(Terrarium.prototype); 
LifeLikeTerrarium.prototype.constructor; 

だから私の質問です。なぜ我々はちょうどのようなものを書いたことができませんでした:

LifeLikeTerrarium.prototype = new Terrarium(); 

これは何か問題を作成するかどうか、それは不適切なJavaScriptですか?

+0

また、私の最後のトリックのために、私はここで同様の対話を見つけました:http://pivotallabs.com/users/pjaros/blog/articles/1368-javascript-constructors-prototypes-and-the-new-keyword "ここではメソッドはcreateと呼ばれ、その理由はコンストラクタにパラメータを指定する必要はないと思われますが、なぜクローン/作成はコンストラクタのパラメータを与える必要があるという問題を解決しますか? – jrbalsano

答えて

2

参照クロックフォードの原型継承:

http://javascript.crockford.com/prototypal.html

プロトタイプの設定を超えたが、あなたは、オブジェクトの内部[[プロトタイプ]]プロパティは、コンストラクタ関数の外部プロトタイプであることを設定し、新しいキーワードを呼び出す必要があります。

What is the 'new' keyword in JavaScript?

、ここで:

http://joost.zeekat.nl/constructors-considered-mildly-confusing.html

+0

ありがとうございます。それらのリンクは多くの助けになりました!私のJava OOPが私の頭の中に掘り下げられているのか、実際にループのために私を投げていたプロトタイプのプログラミングの性質なのかはわかりませんが、最終的にすべてをまとめています。 – jrbalsano

1
それから、素敵な説明はここにある。これが言及されるたびに新しいオブジェクトを使用して、

をコンストラクタ関数を実行します

私の質問は、にOneShotConstructorを作成する必要がある理由ですプロトタイプをコピーするには、を注文してください。なぜ我々だけのような 何か書かれていませんでした。これはすべての問題を作成します

LifeLikeTerrarium.prototype = new Terrarium(); 

を、それが不適切なjavascriptのでしょうか?

オブジェクトを複製するだけでなく、新しいTerrarium()を呼び出すと、その結果が不明なコンストラクタを呼び出します。ラウンドアバウトのやり方をするなら、コンストラクタを呼び出さずにオブジェクトをクローンします。

関連する問題