如何在Javascript中将对象的方法作为参数传递

无法弄清楚如何正确传递对象的方法作为参数。

这是我的代码:

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

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


你也需要传递this上下文。 在提供的例子中,methos在window的上下文中被调用,并且window没有属性p1

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

尝试这个:

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));
链接地址: http://www.djcxy.com/p/97005.html

上一篇: How to pass object's method as a parameter in Javascript

下一篇: ES6 class calling a method within a class with bind vs call?