0

我正在使用 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);

小提琴:http: //jsfiddle.net/morossive/kayKn/

4

1 回答 1

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 将对象视为哈希表,所以我们可以遍历它们的“键”(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 的任何替代方法都可能更好。

于 2013-08-14T18:44:32.987 回答