2013-05-14 65 views
0

我正试图用较少的代码来做一个可重用的模块。会有这样的工作吗? (嗯,不是真的去上班,这只是一个例子给你的想法)用作构造函数的Javascript函数参数

var test = function(foo) { 
    var bar = new foo(); // The keyword foo is from the parameter 
} 

的参数实际上是一个字符串。所以如果我通过了“FooBar”,一个FooBar对象将被创建。

这就像说:

var test = function('FooBar') { 
    var bar = new 'FooBar'(); 
} 

是会适合我正在寻找解决方案还有其他优雅的方式?

非常感谢!

+3

这应该工作得很好,只要'foo'是一个函数。你看到其他吗? – 2013-05-14 04:14:49

+0

你能告诉或解释更多关于你到底想要什么吗? – 2013-05-14 04:45:47

+0

已编辑。对不起这是我的错。 – user1966211 2013-05-14 05:51:22

回答

0

如果foo是一个构造函数,那么你的代码将工作得很好(我很好奇你为什么不试试它)。你可以看到它在这里工作:http://jsfiddle.net/jfriend00/yT6Vk/

如果您想要通过其他/更好的方式来解决您的问题,您必须备份并更详细地描述您真正想要做的事情。

还有其他的方法可以做这种事情,比如工厂函数或者单个函数来检查它的参数来决定要创建哪种类型的对象,但是没有更多关于您想要解决什么问题的信息,我们无法真正地说出其他方法是否比已有的更好/更差。

这种方法的一个缺点是你没有允许任何参数传递给构造函数。

0

我会用道格拉斯Crockford的方法

var booze = { 
    beer:'ale', 
    wine: 'pinot noir' 
} 

//test(X) 

var createObject = function(o){ 
    function F() {} 
    F.prototype = o 
    return new F() 
} 

var test = function() { 
    var x = createObject(booze) 
    return x; 
} 

test()