javascript – 如何在对象表单中传递eval中的参数?

前端之家收集整理的这篇文章主要介绍了javascript – 如何在对象表单中传递eval中的参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个json,当我得到这个json我需要运行回调对象的函数.
{
    formId: 'snn_service_item_form',item_id: '1',item_title: 'some item',item_description: '',item_duration: '10',item_price: '120',item_level_1 : 1,item_level_2 : 0,item_level_3 : 1,item_type: 'p',callback : {
        callbackName : 'getServices',callbackParams : {
            _param1 : 1,_param2 : 2 
    } 
} 
}

所以根据这个我需要运行这个:

getServices(1,2);

我可以用eval函数做到这一点,如:

eval(json.callback.callbackName+'(\''+ json.callback.callbackNParams._param1 +'\',\''+ json.callback.callbackNParams._param2 +'\')');

我可以通过将它放入for in并将参数写入字符串来实现自动化,但我不认为这是最好的方法.

有没有办法从var分配函数名称并将其参数作为对象,在我的情况下,如:

json.callback.callbackName(json.callback.callbackParams);

我知道这不是这样做的方式,但这是我想学的东西.

谢谢,思南.

解决方法

取决于定义要调用函数的位置(全局范围或本地范围).

如果是全局的,则不需要eval(并且避免它更安全),您只需通过全局窗口对象引用该函数

var args = [];
for(var p in json.callback.callbackParams) {
    args.push(json.callback.callbackParams[p]);
}
window[json.callback.callbackName].apply(null,args)

请参阅上面使用的apply() function.

如果它在本地范围内,那么你需要eval(如何使用它).

猜你在找的JavaScript相关文章