20

私は JavaScript をいじっており、特にオブジェクト指向プログラミングをクラスなどでシミュレートしていました。

私は継承を達成するこの方法について知っていました

MyClass.prototype = new AnotherClass();

しかし、私は満足していませんでした. のコンストラクタを呼び出す方法が好きではありませんでしたAnotherClass. だから私は遊んでいて、うまくいくと思われるものを思いついたので、基本的にセカンドオピニオンが必要です.

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

    return new CloneFactory();
}

MyClass.prototype = clone(AnotherClass.prototype);

プロトタイプを複製することにより、その新しいコピーを取得し、それをMyClassのプロトタイプに割り当てて、継承されたプロパティを変更しても親のプロトタイプのプロパティに影響を与えないようにします。このようにMyClass.prototype = AnotherClass.prototype

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

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

私は JavaScript の専門家ではありません。実際、私は JavaScript にかなり慣れていないので、Google で何も見つけられないようなので、これについてセカンドオピニオンを持ちたいと思います。私は悪いコードを実装したくありません:)!

4

2 に答える 2

24

これはほぼ正確に何をするかObject.createです。あなたが書いた関数は、そのメソッドのかなり標準的な「ポリフィル」です。

これは、「真の」プロトタイプの継承をより厳密に反映する方法でオブジェクトの作成を抽象化する、非常に一般的な方法です。間違いなく安全な方法です。

Object.createああ、興味があれば、MDN エントリへのリンクを次に示します: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create/

下部に、いくつかの安全チェックと変数名を除けば、コードとほとんど同じであるポリフィルが実際に含まれていることに気付くでしょう。

于 2012-07-15T01:01:48.877 に答える