このURLからjavascript Modular patternを読んでいてhttp://viralpatel.net/blogs/javascript-module-pattern/
、
http://www.codeproject.com/Articles/247241/Javascript-Module-Pattern
そして、私の心に混乱が生じることがあります。だからここで私は混乱するところに物を置いています。すべてを理解するのを手伝ってください。
質問1
以下のコードを参照してください。var キーワードを使用してモジュールで宣言されたすべてのプライベート変数と関数。ここで pub オブジェクトも var キーワードで宣言されています。パブがプライベートであることを意味します。したがって、pub が非公開の場合、以下のコードのように外部から pub 関連の関数を呼び出す方法
呼び出し構文
CalcModule.add(2,10);
CalcModule.add(5,15);
CalcModule = (function(){
var pub = {};
var mem = new Array(); //private variable
var storeInMemory = function(val) { //private function
mem.push(val);
};
pub.add = function(a, b) {
var result = a + b;
storeInMemory(result); //call to private function
return result;
};
pub.sub = function(a, b) {
var result = a - b;
storeInMemory(result); //call to private function
return result;
};
pub.retrieveFromMemory = function() {
return mem.pop();
};
return pub;
})();
CalcModule.add(2,10);
CalcModule.add(5,15);
console.log(CalcModule.retrieveFromMemory()); //outputs 20
console.log(CalcModule.retrieveFromMemory()); //outputs 12
質問2
異なる JS ファイル間でのモジュールの分離: 拡張
file1.js
var CalcModule = (function($, pub){
//jQuery will still be available via $
var mem = new Array(); //private variable
pub.storeInMemory = function(val){
mem.push(val);
};
pub.retrieveFromMemory = function(){
return mem.pop();
};
return pub;
})(jQuery, CalcModule || {});
file2.js
var CalcModule = (function($, pub){
//jQuery will still be available via $
pub.add = function(a,b){
var result = a + b;
pub.storeInMemory(result);
return result;
};
pub.sub = function(a,b){
var result = a - b;
pub.storeInMemory(result);
return result;
};
return pub;
}(jQuery, CalcModule || {}));
このfunction($, pub)
構文を参照してください。なぜドル記号があり、なぜpubがそこを通過する必要があるのか.
質問 3
module Augmentation と sub module はどう違いますか?
質問 4
既存のモジュール モジュールの拡張
var Module1 = ( function (oldModule) {
var
//assigning oldmodule in to a local variable.
parent = oldModule;
//overriding the existing privileged method.
parent.privilegedMethod = function ( ){
//do something different by overriding the old method.
};
//private method accessing privileged method of parent module.
var privateMethod2 = function ( ) {
parent.privilegedMethod();//can access privileged method of Module
parent.publicMethod1(); //can access public method of Module
}
return {
newMethod : function ( ) {
///do something for this brand new module.
///use some functionality of parent module.
/// parent.privilegedMethod( );
}
};
} )(Module);//
モジュールオブジェクトは、拡張したい既存のモジュールです。
モジュールを拡張する上記のコードを誰でも理解できる方法。この構文だけで(Module)
?
質問5
モジュールを 5 つの個別の js ファイルに記述する場合、どのファイルを最初にロードする必要がありますか。これらのモジュール関連の s ファイルをロードする順序はどうなりますか?