2015-10-24 49 views
0

我有一組全局對象。那些全局變量可以有不同的設置。JavaScript:如何將單個全局對象傳遞給一組類?

var s1 = { 
    test1: 10, 
    test2: 20 
} 

var s2 = { 
    test1: 10, 
    test2: 50 
} 
... 

而且我有一組使用這些對象進行自我配置的類。他們看起來是這樣的:

var classA = function(s) { 
    this.pA1 = s.test1 + s.test2; 
    this.pA2 = Math.sqrt(s.test1); 
} 

var classB = function(s) { 
    this.pB1 = s.test1 * s.test2; 
    this.pB2 = s.test1 + s.test2 - s.test1 * s.test2; 
} 
... 

這些類的實例是:

var iA1 = new classA(s1); 
var iB1 = new classB(s1); 
... 

var iA2 = new classA(s2); 
var iB2 = new classB(s2); 
... 

在現實中,我有更多的設置,類和實例。

如何在不每次傳遞參數的情況下做到這一點?

+0

「最佳組織代碼選項」 似乎非常廣泛,基於輿論。儘量避免這種詞彙。專注於不依賴個人經驗和意見的明確,具體的目標。請將它從你的問題中刪除,以便用一個更好的目標來取代它(例如「如何做到這一點,而不需要每次傳遞一個參數?」),並指定一個變化範圍(否則它可能仍然過於寬泛可能的答案太多了)。 –

回答

1
function factory(s) { 
    return { 
     iA: new classA(s), 
     iB: new classB(s), 
     iC: new classC(s), 
     iD: new classD(s) 
    }; 
} 

var set1 = factory(s1), 
    set2 = factory(s2), 
    ... 

或者:

function factory(constructors, arg1, arg2) { 
    var res = {}; 
    for (var i in constructors) { 
     var ctor = constructors[i]; 
     res[ctor.name] = new ctor(arg1, arg2); 
    } 
    return res; 
} 

var constructors = [ classA, classB, classC ]; 
var set1 = factory(constructors, s1), 
    set2 = factory(constructors, s2), 
    ... 
相關問題