JavaScriptで原型による継承を実現

1669 ワード

5年前にJavaScriptでクラスモードによる継承を実現すると書きました.JavaScriptはクラスのように原型の言語(class-free,prototypal)に基づいていることを示しています.そして、十分な能力があります.クラスのような構造をまねて、私のプログラム様式はその後発展しました.私はすでに「原型主義」を完全に支持し、「類」のモードから解放しました.
私の旅は迂回しています.JavaScript自体はその原型の天性にも抵触しています.プロトタイプのシステムでは、対象はオブジェクトに引き継がれます.JavaScriptはそれらの演算を完了するオペレータが足りないにもかかわらず、newオペレータがあります.
new f()
新しいオブジェクトを作成します.
f.prototype
これは間接的で意図的にこの言語を古典的なトレーニングプログラマと同じように見えるが、必ずしもそうではない.JavaプログラマがずっとJavaScriptを持っているのを見ることができるのは非常に簡単な観点である.JavaScriptのコンストラクションモードは古典派の一団の中には現れていません.これはJavaScriptが本当の天性の原型言語であることを曖昧にしてしまいました.結果として、この言語をどのように有効に使うかはほとんど分かりませんでした.
幸いなことに、原型継承を実現するオペレーターツールを作りやすいです.私のツールバッグに標準的な特徴があります.お勧めします.
function object(o) {
        function F() {}
        F.prototype = o;
        return new F();
    }
object関数はJavaScriptのコンストラクタモードを分解して、本当にプロトタイプ継承に達しました.古いオブジェクトをパラメータとして返し、新しい空のオブジェクトを継承します.私たちはこの新しいオブジェクトのメンバーを取得しようとすると、そのメンバー自体がいない場合、古いオブジェクトはこのメンバーを提供します.対象が対象から継承されていますが、多くの対象がこのように導かれていますか?
クラスを作成する代わりに、プロトタイプオブジェクトを使用して、Object関数を使って新しいインスタンスを作成します.JavaScriptではオブジェクトは可変ですので、新しいインスタンスを拡充して、彼らに新しい属性と方法をあげます.これらの新しい例はまた更新されたインスタンスの原型を担当することができます.私たちはクラスで似たような相手をする必要がありません.
使いやすくて、私達はobject関数というものを作成して、他のユーザー化カスタマイズを提供します.例えば、オブジェクトを拡張して特権方法を使うことができます.私は時々彼らを創建関数と呼びます.もし創建関数が必要ならば、もう一つの創建関数を呼び出して、Object関数を呼び出します.そうしたら、私たちはparasitic継承のパターンがあります.
これらのツールを使って、JavaScriptのlambandsと対象のquasi-literalsを加えて、とても良い構造化のプログラムを書くことができます.それは巨大で複雑で効率的です.古典的な対象モデルは今日最も流行している方式はだんだん遠くなりましたが、原型に基づく対象モデルはより有望で、より豊かな表現力を提供すると思います.
これらの新しいモデルを勉強することで、より良い古典的なプログラマーになります.
作者:Duglas Crockford原文:Prottypal Inhersitance in JavaScript翻訳:blogspot