2012-07-15 10 views
12

JavaScriptを使って、特にクラスやその他のものでオブジェクト指向プログラミングをシミュレートしていました。継承のプロトタイプをコピーしますか?

私は相続

MyClass.prototype = new AnotherClass(); 

を達成するためのこの方法を知っていたしかし、私は満足していなかった、私はAnotherClassのコンストラクタを呼び出すために必要な方法が好きではありませんでした。だから私は遊んでいて、仕事をしていて基本的に第二の意見を求めているようなものを思いつきました。我々はそれの新しいコピーを取得し、継承されたプロパティを変更すると、親のプロトタイプの特性に影響を及ぼさないようにMyClassのプロトタイプにそれを割り当てるプロトタイプをクローニングすることにより、

function clone (obj) 
{ 
    function CloneFactory() {} 
    CloneFactory.prototype = obj; 

    return new CloneFactory(); 
} 

MyClass.prototype = clone(AnotherClass.prototype); 

。このようにMyClass.prototype = AnotherClass.prototypeでしょう。

私はストレステストを実行しました。これは、特定の状況、つまり親のコンストラクタに多くのコードがある場合に効率的です。それ以外の場合はほぼ同じです。もう一つのメリット(または少なくとも私が有益であることが分かっている)は、サブクラスから情報が隠れることをある程度可能にするということです。特権を持つメソッドやメンバーは継承されません。

私が見落としている大きな落とし穴がありますか?

私はJavaScriptのエキスパートではありませんが、実際にはJavaScriptの新機能がありますので、私はGoogleを介して何かを見つけることができないため、これについてもう一度意見を述べたいと思います。私は悪いコードを実装したくない:)!

答えて

17

これはほぼとなります。正確にはObject.createとなります。あなたが書いた関数は、そのメソッドのかなり標準的な "polyfill"です。

これは "真の"プロトタイプ継承をより正確に反映する方法でオブジェクト作成を抽象化する実際の方法です。確かに物事を行う安全な方法。彼らは実際にあなたのコードとほとんど同じであるポリフィルを含むことをhttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create/

あなたが気づく下部に:もし興味があるなら

ああ、ここでは、Object.createのためのMDNエントリへのリンクです安全性チェックと変数名を保存します。

+0

ありがとうございました!私は今までObject.createについて知りませんでした。 – SpaceFace

関連する問題