1

対応する値を設定する正しい方法は何ですか?
「for ... in」でこれを機能させる方法。

私が self[state] に関連付けた関数は、ループ中に関連付けられたものではなく、states[state] の最新の値を使用してループの後に実行されるように見えます。

cssbtn = function(id, states, state){

  var self = document.getElementById(id);
  var states = states ||  {'off': '0px 0px', 'selected': '-20px 0px', 'selected2': '-40px 0px' };
  var state = state || 'off';

  for (state in states) {
    self[state] =  function (){
      alert(states[state]); //demo purposes
    }
  }

  self.onmouseover = function(evt){
    self.selected();
  }

  self.onmouseout= function(evt){
    self.off();
  }

  self.onclick= function(evt){
    self.selected2();
  }

  return self;
}
4

1 に答える 1

1

1 つの正しい答えは次のとおりです。

self[state] = (function(i) { return function() { alert(i) } })(states[state]);

からそれを見つけました: 外​​部スコープを囲むときにJavaScript変数を逆参照するにはどうすればよいですか

これが唯一の方法ですか?より明白でエレガントな多言語 (JavaScript ではない) アプローチはありますか?

于 2012-06-18T16:32:14.883 に答える