2011-10-19 49 views
0

根據我在之前的question中收到的答案,我想知道如何簡化以下JavaScript模式。簡化JavaScript模式

通過簡化我的意思是保持乾燥不重複Module.*method

ex。

Module.one = function() { 
    //one 
}; 
Module.two = function() { 
//two 
}; 

這是我如何相信它應該是這樣的:

Moduje.js

var Module = (function(Module) { 
    init = function() { 
    console.log("init"); 
    }; 
    return Module; 
})(Module || {}); 

Module.Users.js

var Module = Module || {}; 
Module.Users = (function(Users) { 
    init = function() { 
    console.log("Module.Users.init"); 
    };  
    return Module.Users; 
})(Module.Users || {}); 

這裏是原來的代碼。

Moduje.js

var Module = (function(Module) { 
    Module.init = function() { 
    console.log("init"); 
    }; 
    return Module; 
})(Module || {}); 

Module.Users.js

var Module = Module || {}; 
Module.Users = (function(Users) { 
    Users.init = function() { 
    console.log("Module.Users.init"); 
    }; 
    return Users; 
})(Module.Users || {}); 

回答

0

好:

var Module = (function(Module) { 
    init = function() { 
    console.log("init"); 
    }; 
    return Module; 
})(Module || {}); 

不,這是行不通的。您正在爲功能創建「模塊」的默認值。你在「init」的聲明中也忘記了var,在這種情況下,這種排序使它工作,但是以一種破壞的方式(因爲它是一個全局變量,如果不是由於「嚴格」模式可能被強制執行的錯誤)。由於您使用該語句聲明瞭「Module」,因此將「Module」作爲(可能的)參數傳遞沒有任何意義。

我不知道「簡化」一詞對你來說意味着什麼;原來對我來說還好。

編輯 —如果你想要做的就是擺脫基礎對象,你可以使用「擴展」功能,無論是從庫或反覆引用的是你自己寫的:

function extend(target) { 
    var sources = Array.prototype.slice.call(arguments, 1), source; 
    for (var i = 0; i < sources.length; ++i) { 
    source = sources[i]; 
    for (var key in source) { 
     if (source.hasOwnProperty(key)) 
     target[key] = source[key]; 
    } 
    } 
    return target; 
} 

然後,你可以做這樣的事情:

var Module = createModule(); // make an object however you want 

Module = extend(Module, { 
    newProperty_1: "hello world", 
    newProperty_2: function() { 
    // this will become a method on "Module" 
    }, 
    newProperty_3: { 
    subObjectProperty: "whatever" 
    } 
}); 
+0

簡化對我來說意味着擺脫重複Module.method1,Module.method2的。 – howtodothis