Can't figure out how to pass object's method as a parameter properly.
Here is my code:
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
The only way to pass a method correctly I have found is to pass both object and method and use call():
function doAction2(obj, getParamCallback) {
console.log(getParamCallback.call(obj));
}
doAction2(mt, mt.getParam); // 123
Is there any way that requires only method to be passed, not both method and object?
You need to pass the
this
context as well. In provided example, methos is being called in the context ofwindow
, andwindow
does not have propertyp1
Use
.bind()
to pass the context.bind
returns a function that when later executed will have the correct context set for calling the original function. This way you can maintain context in async callbacks, and events.[Reference]
Try this:
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));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With