将通用函数动态关联到对象属性时的范围。 (模块模式)

时间:2012-06-17 14:28:17

标签: javascript scope

设置相应值的正确方法是什么?
如何使用“for ... in”来完成这项工作。

我与self [state]关联的函数似乎在具有最新状态[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;
}

1 个答案:

答案 0 :(得分:1)

一个正确的答案是:

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

偶然发现: How can one de-reference JavaScript variables when enclosing an outer scope

这是唯一的方法吗?一种更明显/优雅的多语言(不是javascript)方法?