2013-05-14 36 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()