0

通常、関数変数を次のように設定します。

var width = null;
var height = null;

if(options) {
    if(options.width) width = options.width;
    if(options.height) height = options.height;
}

次のようなものでこれを単純化する方法はありますか?

var width = null;
var height = null;

if(options) {
    for(var val in options) {
        val = options[val];
    }
}

この単純な例では、大きな利点のようには見えませんが、単一のオブジェクトからの値で設定する多数の変数がある状況では (言うように... ajax がそれを行うように)、それはオブジェクトをループしてそのようにする方がはるかに簡単です。

4

1 に答える 1

0

直接ではありません。グローバル名前空間 ( ) にアタッチしたい場合は、次のwindowように記述できます。

if (options) {
  for(var val in options) {
    window[val] = options[val];
  }
}

window...しかし、絶対に必要でない限り、一般的には散らかしたくないでしょう。一般的に使用される代替手段は、デフォルト オプションを保持するためのオブジェクトを作成し、新しいオプションが提供されたときに単純にそれらを上書きすることです。

var defaults = {
  height: 0,
  width: 0
}

if (options) {
  for(var val in options) {
    defaults[val] = options[val];
  }
}

// use values now stored in `defaults`
console.log(defaults.height);
于 2012-07-28T02:02:02.983 に答える