我使用的是JQuery插件pnotify。 我想缩短这段代码:
$.pnotify.defaults.styling = "jqueryui";
$.pnotify.defaults.delay = 1500;
$.pnotify.defaults.title = 'Error'
$.pnotify.defaults.mouse_reset = false;
$.pnotify.defaults.history = false;
这样的事情:
var darray = { 'styling':'\'jqueryui\'', 'delay':'1500', 'title':'\'Error\'', 'mouse_reset':'false', 'history':'false' };
$.each(darray, function(option,choice){
eval("var $.pnotify.defaults." + option + "=" + choice + ";");
});
然而,尽管尝试了各种各样的事情,但我失败了。这是我尝试过的一些事情:
var darray = { 'styling':'\'jqueryui\'', 'delay':'1500', 'title':'\'Error\'', 'mouse_reset':'false', 'history':'false' };
$.each(darray, function(option,choice){
eval("var $.pnotify.defaults." + option + "=" + choice + ";");
});
JSONstring='var $.pnotify.defaults.' + option + "=" + choice + ";";
$.parseJSON(JSONstring);
string99 = 'var $\.pnotify\.defaults\.' + option
$.parseJSON('{string99=choice}');
option='var $.pnotify.defaults.'+option;
var JSONObject= {'option':choice};
$.parseJSON(JSONObject);
答案 0 :(得分:1)
你可以尝试这个(未经测试,但你明白了):
var darray = {
styling: 'jqueryui',
delay: 1500,
title: 'Error',
mouse_reset: false,
history: false
};
for (var mbr in darray) {
$.pnotify.defaults[mbr] = darray[mbr];
}
因为JavaScript处理像hashtables这样的对象,所以我们可以迭代它们的“键”(for (var mbr in darray)
)并为对象中的新键赋值。例如:
var obj = {...};
// The following are equivalent:
obj.x = 5;
obj['x'] = 5;
但是,我认为您的问题可能会有更优雅的解决方案(如果您担心在$.pnotify.defaults
中覆盖预先存在的值,请不要使用此方法):
$.pnotify.defaults = {
styling: 'jqueryui',
delay: 1500,
title: 'Error',
mouse_reset: false,
history: false
};
我知道你问过如何使用eval来解决这个问题,但我认为通常使用eval的替代方案可能更好。