2016-10-11 10 views
0

私は以前のチュートリアルを調べていましたが、そのチュートリアルでは、再利用可能なコードを書くために次のアプローチを使用していました。私はそのチュートリアルを見つけようとしていますが、まだ役に立たない。私は以下のアプローチについて少し知りたいと思いますし、モジュールをグローバル名前空間に追加することなくnew演算子でこれを再利用するにはどうすればよいですか?私は再利用可能なコードをjavascriptに書くというこのアプローチを知りたいです

(function(factory) { 

})(function() { 
    // All of the logic code was here in that tutorial. 
}); 
+0

'var constructor = factory();上の関数本体の新しいコンストラクタ '??? – Bergi

+0

@Bergi私はそれを得ることができません - あなたは例を挙げることができますか? – mhodges

+1

あなたのモジュールがグローバル名前空間上にある場合、それがなぜ問題なのか尋ねることができますか?これはかなり一般的な方法です。 – mhodges

答えて

0

私はあなたがここにはJavaScriptコンポーネントを

をカプセル化し、再利用可能なほかの作成を目指しているモジュールのパターンをチェックアウトするべきだと思いますが

MyModule = function(){ 
     var privateAttribute = 2; 
     return { 
     publicAttribute : "this is a public attribute"; 
     publichMethod : function (param1){console.log(param1);} 
     } 

}(); 

var module = MyModule; 
module.putlicMethod("hello world"); 
+1

私はモジュールのパターンを知っています。私がこれを持っている唯一の心配は、「MyModule」がグローバルスコープだということです。 – 2619

0

短い例ですので、アイデアがあること秒であります関数は、最初の関数でfactoryパラメータとして渡すものなので、factoryのインスタンスを作成し、それらのインスタンスに対してコードを書いてくださいTOP function - bottom関数ではありません。下の関数はモジュール定義です。

@Bergiのおかげで、私は正しい軌道に乗り始めました。ここで

はコードと例です:あなたのコードの例から

(function(factory) { 
 
    var constructor = new factory(); 
 
    var obj1 = new constructor(); 
 
    var obj2 = new constructor(); 
 
    console.log("obj1: ", obj1); 
 
    console.log("obj2: ", obj2); 
 
})(function() { 
 
    return function() { 
 
    return { 
 
     prop1: "123", 
 
     prop2: "ABC" 
 
    } 
 
    } 
 
});

0

あなたが探している内容を正確に把握することは困難であるが、コードはユニバーサルモジュール定義パターンに似ています(UMD)を使用して、さまざまなモジュールローダーで使用するための再利用可能なモジュールを定義します。

あなたはモジュールのセットアップを扱う上位関数への引数として渡されfactory下の機能、にあなたのコード—実際のコードのロジック(モジュール)で記述する何を示してUMD(taken from this page)の例:

(function (root, factory) { 
    if (typeof define === 'function' && define.amd) { 
     // AMD 
     define(['jquery'], factory); 
    } else if (typeof exports === 'object') { 
     // Node, CommonJS-like 
     module.exports = factory(require('jquery')); 
    } else { 
     // Browser globals (root is window) 
     root.returnExports = factory(root.jQuery); 
    } 
}(this, function ($) { 
    // methods 
    function myFunc(){}; 

    // exposed public method 
    return myFunc; 
})); 
関連する問題