【问题标题】:Call function from string inside object?从对象内部的字符串调用函数?
【发布时间】:2011-10-04 18:50:56
【问题描述】:

我在字符串中有一个函数名:

 var func = "doTest";

我需要将此函数应用于当前实例(“this”);

所以我需要它来调用:

 this.doTest();

我该怎么做?我无法通过窗口。

谢谢, 卫斯理

【问题讨论】:

    标签: javascript jquery string function object


    【解决方案1】:

    只需使用object[functionName](); 的构造,如下所示:

    function Person() {};
    Person.prototype.speak = function() { alert('ohai'); };
    var john = new Person, action = 'speak';
    
    john[action]();
    

    另类风格:

    var Person = {  
      speak: function() { alert('ohai'); }, 
      speakDelegate: function() { var action = 'speak'; this[action](); } 
    };
    Person.speakDelegate();
    

    【讨论】:

    • 我更新了我的答案。如果这还不够,请给我们更多细节。 this 解决了什么问题?你在处理一个 jQuery 对象吗?更多信息。
    【解决方案2】:
    this[func]();
    

    不需要.call.apply,因为上下文保存在引用中。

    例如:

    var obj = {
       doTest: function(){ console.log(this); },
       fn: function(){ var name='doTest'; this[name](); }
    };
    obj.fn(); // logs the object, proving this has the correct context.
    

    【讨论】:

      【解决方案3】:

      试试下面的

      var funcObj = this["doTest"];
      funcObj.apply(this);
      

      这样做是从this 中获取名为doTest 的成员。然后它通过apply 执行函数并告诉javascript 将this 绑定为函数内的this。如果您在非 this 值上考虑相同的代码,我认为该示例不会那么混乱

      var obj = {
        doTest: function() {
          console.log("doTest called");
        }
      };
      
      var doTestFunc = obj["doTest"];
      doTestFunc.apply(obj);
      

      在这种情况下,方法doTest 将使用值obj 作为this 执行

      【讨论】:

        【解决方案4】:

        如果你使用 jquery,你可以这样做:

        $(this)[func]()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-27
          • 2019-12-16
          • 2021-03-11
          • 1970-01-01
          • 2014-01-24
          • 1970-01-01
          • 2011-08-31
          相关资源
          最近更新 更多