2016-08-17 31 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的回应。不过谢谢你 –