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 に答える