私はビデオを今度はthis question on class-free OOPから数回見ましたが、これを現実世界の例に適用するのは問題です。Crockfordの新しいコンストラクタパターンで "コンストラクタ"機能をどのように共有できますか?
クロックフォードの新しいコンストラクタパターンは次のようになります。spec
はオプションのハッシュし、その結果のオブジェクトをある
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function() {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other,
});
}
は、内部のメンバーのすべてを超える閉じるメソッドを公開します。この構造を無視してください(これは現在のJSで長い形式で行うことができます)このパターンを実際の例でどのように適用するのですか?
現在、基本クラスModule(model, id)
のライブラリがあります。model
は、ブートストラップデータです。
// constructor, original flavor
function Module(model, id) {
this.id = id;
this.model = model;
}
私は、この親Module
から継承したモジュールのいくつかの味を持っています。
// constructor, Crockford's Cool Ranch
function module(spec) {
let id = spec.id,
model = spec.model;
return Object.freeze({});
}
私は(すべてで継承を使用しているように見えるのではなく、複数のソースからオブジェクトを構成しない)クロックフォードのパターンを使用しない方法:クロックフォードのパターンの下で、私の代わりに、「コンストラクタ」としてこれを持っているでしょうは、複数のフレーバーのモジュールの間でこの基本的な構成を共有します?
私はid
とmodel
が各モジュールの "コンストラクタ"のローカル変数になることを知っています。私は本質的に、Crockfordのパターンを使用してモジュールの各フレーバに対して繰り返すことを避ける方法を尋ねています。
私はまた、この他の質問で、私が理解していない答えを信じていることを最初に指摘したいと思います。 : – Mathletics
あなたはここに隠喩を混在させています; 3番目のボックスは2番目のボックスと似ていません。3番目はprotoなしの空白のオブジェクトを返します。2番目のオブジェクトはprotoと2個のカスタムオブジェクトを返します。 crockfordは、プロトタイプのシンプルさを持っています(その場合、_prototype_ではなく_other_から一度に複数のメソッドを取得するのと同じですが)extend()を使用してすべてを反復することなく、ツール。 – dandavis
@dandavis私は2番目のボックスにプロパティが公開されていることを知っています.3番目はプライベートです。2番目のボックスを完全に無視すると、答えは同じですか?必要なセットアップコードを繰り返さないようにする方法はありませんモジュールの各フレーバーにプライベートメンバーを割り当てますか? – Mathletics