2015-12-29 3 views
2

Невозможно выяснить, как правильно передать метод объекта в качестве параметра.Как передать метод объекта в качестве параметра в 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 

Единственный способ передать метод правильно я нашел, чтобы передать как объект и метод и использование вызова():

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

Есть ли путь, который требует только метода, который должен быть передан, а не как метод, так и объект?

ответ

3

Необходимо также передать контекст this. В указанном примере, Митос вызывается в контексте 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));

+1

Благодаря Rayon! Это отлично работает и в Google Apps Script! –

Смежные вопросы