【问题标题】:How to pass object's method as a parameter in Javascript如何在Javascript中将对象的方法作为参数传递
【发布时间】:2016-04-02 23:53:59
【问题描述】:

不知道如何正确地将对象的方法作为参数传递。

这是我的代码:

var MyTest = function (p1) {
  this.p1 = p1;
};
MyTest.prototype.getParam = function () {
  return this.p1;
};

function doAction(getParamCallback) {
  console.log(getParamCallback());
}

var mt = new MyTest(123);
console.log(mt.getParam()); // 123
doAction(mt.getParam);      // undefined

我发现正确传递方法的唯一方法是同时传递对象和方法并使用 call():

function doAction2(obj, getParamCallback) {
  console.log(getParamCallback.call(obj));
}
doAction2(mt, mt.getParam);    // 123

有什么方法只需要传递方法,而不是方法和对象吗?

【问题讨论】:

    标签: javascript function object parameter-passing


    【解决方案1】:

    您还需要传递this 上下文。在提供的示例中,methos 在window 的上下文中被调用,而window 没有属性p1

    使用.bind() 传递上下文。 bind 返回一个函数,该函数在稍后执行时将设置正确的上下文以调用原始函数。这样您就可以在异步回调和事件中维护上下文。[Reference]

    试试这个:

    var MyTest = function(p1) {
      this.p1 = p1;
    };
    MyTest.prototype.getParam = function() {
      return this.p1;
    };
    
    function doAction(getParamCallback) {
      alert(getParamCallback());
    }
    
    var mt = new MyTest(123);
    
    doAction(mt.getParam.bind(mt));

    【讨论】:

    • 谢谢人造丝!这在 Google Apps 脚本中也能完美运行!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多