【问题标题】:Storing variables in functions在函数中存储变量
【发布时间】:2015-03-26 20:51:39
【问题描述】:

假设您要预定义许多由按钮生成器创建的按钮。

function createButton(name, func){
  var btn = '<div class = "button" name = '+name+'/>';
  $('.btn[name = "'+name+'"]').on('click', function(func){});
}

var butn1 = {
  name : "exit",
  func : func1
}

createButton(btn1);

现在,如果您有 100 个按钮,这意味着很多变量。那不好吗?如果是这样会更好吗?

function chooseButton(name){
 var btn;
 switch(name){
   case "exit":
      btn = {
         name : "exit",
         func : func1
      }
    break;
    case......
  }
 return btn;
}

   var myBtn = chooseButton('exit');
  createButton(myBtn);

【问题讨论】:

  • 我为什么要假装你的代码没有工作?如果您尝试通过它来演示某些东西,请不要发布错误的代码。
  • 与问题无关。
  • 如果您需要 100 个变量,那为什么会不好呢?是什么让您认为每次运行时创建新对象的 100 个 case 语句会更好? (定义)
  • 我不知道 - 这就是我要问的。有什么更好的方法。

标签: javascript


【解决方案1】:

假设我已经理解了你的问题,如果觉得对这类事情使用更通用的构造函数会更好。

HTML

<div id="buttonContainer">
    <button class="btn btn-type-a">Type A Button</button>
    <button class="btn btn-type-b">Type B Button</button>
    <!-- add further types -->
</div>

JS

var _functs = {
    typeA: function () { alert('type A funct'); },
    typeB: function () { alert('type B funct'); }
};

var _buttons = document.getElementById('buttonContainer')[0].childNodes;

for (var _i = 0; _i < _buttons.length; _i++) {
    if (_buttons[_i].classList.contains('btn-type-a')) {
        /* 
         node.classList.contains (not supported by IE < 10)
         $(_buttons[_i]).hasClass('btn-type-a') if you're using jQuery
        */
        _buttons[_i].addEventListener('click', _functs.typeA, false);
    }
    // other logic for other button assignment
};

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多