2017-01-29 6 views
0

私はthis質問を見たことがあり、私はクラスを拡張する方法を知っています。しかし、方法でそれを行うのは良い習慣ですか?これに代えてメソッドを使用してクラスを拡張するのは良い方法ですか?

function extendClass(child, parent) { 
    child.prototype = Object.create(parent.prototype); 
    child.constructor = child; 
} 

extendClass(Banana, Fruit); 

:これを使用することが安全である

Banana.prototype = Object.create(Fruit.prototype); 
Banana.prototype.constructor = Banana; 
+0

私は彼らが同じだと思います。最初の1つは、多くのクラスを拡張する必要がある場合に柔軟性があります(クラスごとに2行のコードを書く必要はありません)。 –

答えて

3

繰り返し作業を実行するための機能を使用したのではなく、どこでも作業を繰り返しますが、それは標準的な慣行で行う必要があります。エラーの機会が減り、時間の経過とともに強化が必要な場合に備えて操作を集中管理します。コンストラクタ関数とそれに関連するプロトタイプ( "クラス")を継承関係に結びつけることは例外ではありません。


接線方向に関連したサイドノート:(もちろん、それはまだ動作しますが)時代遅れであるES2015(別名「ES6」、2015年6月にリリーススペック)それらの階層を設定するためのこの方法のとおり。 ES2015 +はclassextendsです。

+0

'extendClass(Banana、Fruit) 'を呼び出すこともできますか?実際の 'バナナ'機能?宣言は上に載せなければなりません。 –

+2

@HristiyanDodov:それは関数宣言であり、関数式ではないとすれば、それはうまくいくでしょう(あなたが言うように)。あなたがスタイルの問題としてそれをしたいかどうかはもちろん、あなた次第です。 –

+0

CF。 *「これらの階層を設定するこの方法は時代遅れです」*。 *古くなったと認識されるのは、これらの階層を設定する*構文*だけです。 ES2015の「ウェイ」は、クラスの真の性質、プロトタイプを隠し、いくつかの特別な落とし穴(例えば、実際のプライベートメソッドやプロパティはありません)を追加しながら、全く同じことを行います。 – Tyblitz

関連する問題