"object Is Not A Function" When Saving Function.call To A Variable
Solution 1:
Function.prototype.call is an ordinary function that operates on the function passed as this.
When you call call from a variable, this becomes window, which is not a function.
You need to write call.call(slice, someArray, arg1, arg2)
Solution 2:
Try this:
functiontest(){
var a = function(args){
returnArray.prototype.slice.call(args);
};
b = a(arguments);
// Do somethingsetTimeout(function(){
var c = a(arguments);
// Do something else
}, 200);
}
The same error will happen if you try doing something like:
var log = console.log;
log("Hello");
The reason is that when you do this you are assigning the function x (in my example log) to the variable log. BUT the function contains a call to this which now refers to window and not to console, which then throws an error that this is not an object
Solution 3:
The problem is that call is a method (a function that belongs to an object) that expects its owner (its this) to be a function. When you write a = Array.prototype.slice.call, you're copying the function, but not the owner.
The "object is not a function" message isn't saying that a isn't a function, it's saying that its this isn't a function. You could technically achieve what you describe by writing a.call(Array.prototype.slice, arguments), but obviously that's not what you want!
Post a Comment for ""object Is Not A Function" When Saving Function.call To A Variable"