2016-08-17 30 views
0

我有幾個對象,他們都有一些被稱爲相同但做不同的事情的方法。jQuery:使用基於變量值的動態對象

當我點擊一個按鈕,我想打電話給init()方法,但基於我點擊了哪些按鈕 對象是不同的。

這裏是一個片段

$btn.on('click', function(e){ 

    e.preventDefault(); 

    var $trigger = $(this); 
    var objectName = $trigger.data('object'); 

    /* 
    if objectName is 'user', I want to call user.init(), 
    if it's 'product' I want to call product.init() and so on... 
    right now i get an error if I call like his 
    */ 
    objectName.init($trigger); 

}); 

是否可以動態調用這樣一個對象?我知道這是它的屬性和方法,但我沒有找到關於這個問題的任何事情。

謝謝。

+0

'VAR對象名= JSON.parse($ trigger.data( '對象'));' – Tushar

回答

3

這是更好地做映射

var entities = { 
    user: user, 
    entity: entity 
} 

var objectName = $trigger.data('object'); 

entities[objectName].init($trigger); 
+0

謝謝,這似乎是最乾淨的解決方案。 –

1

如果在全球範圍內定義了對象(或功能),可以使用window對象訪問它們:

var funcT = function() { 
 
    console.log('funcT was called'); 
 
} 
 

 
var objT = { 
 
    'a': 1, 
 
    'b': 2 
 
} 
 
function a() { 
 
    var funcName = 'funcT' 
 
    window[funcName](); 
 
    
 
    var objName = 'objT' 
 
    console.log(window[objName]); 
 
} 
 

 
a()

1

使用window[variable]您可以基於另一個變量訪問變量。

因此,所有你需要做的是,以取代objectName.init($tr‌​igger);window[objectName].‌​init();

+0

他們不是全球性的,所以我會堅持Maxx的迴應。不過謝謝你 –