2015-10-24 46 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), 
    ... 
相关问题