使用变量中的字符串调用闭包内的函数

时间:2016-12-04 23:57:55

标签: javascript

我知道这个问题在SO上已被问过几次,但我梳理了大约12个问题,但没有一个能够帮助我。

  $(document).ready(function () {
  var Joe = function(){
    function introduce(petname){
      alert(petname)
    }

     return {
    introduce:introduce
    }
   }();

  var Jane = function(){
   function introduce(petname){
      console.log(petname)
    }

     return {
    introduce:introduce
    }


  }()
 }

如果我在变量中存储了joe这个词怎么能调用函数

 Joe.introduce('pluto')

假设我将单词Joe存储在变量fnc

  fnc = "Joe";

我不想使用eval。我试过window[fnc.introduce('pluto')]() 正如其他人所建议但它不起作用。

2 个答案:

答案 0 :(得分:0)

我能想到的唯一方法就是这样......

将您的函数存储在对象中,然后使用object[fnc]引用该函数。

编辑: 更新原始代码以反映OP的编辑

fnc = 'Joe';

$(document).ready(function () {
  var object = {
    Joe: function () {
      function introduce(petname) {
        alert(petname)
      }
      
      return {
        introduce: introduce
      };
    },

    Jane: function () {
      function introduce(petname) {
        console.log(petname)
      }
      
      return {
        introduce: introduce
      };
    },
  };
  
  object[fnc]().introduce('pluto');
  
  object['Jane']().introduce('goofy');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

试试这个! =)

&#13;
&#13;
var Joe = function(){
  this.introduce = function(pet){
    alert(pet);
  }
}

var Jane = {
  introduce : function(pet){
    alert(pet);
  }
}

$(function(){
  new Joe().introduce('pluto');
  
  Jane.introduce('food');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
&#13;
&#13;
&#13;