Для call this и должен быть всегда функцией. Это какбэ очевидно из
Function.prototype.call: что значит call - встроенный метод любой функции.
Обычно всё непонимание идёт от приписывания this каких-то мистических свойств, в то время как this - простая ссылка, отличающаяся от любой иной переменной только тем, что
принимает значение в зависимости от способа вызова и больше ничем.
Ничто не мешает иметь в this функцию:
function foo(num){
return num
}
function bar(num){
return this(num);
};
console.log(bar.bind(foo)(99)) // 99
выглядит примерно так . .
Function.prototype.bind = function(contextObject){
let funkToBind = this,
args = Array.prototype.slice.call(arguments,1)
return funkToBind.apply( contextObject , args.concat(Array.prototype.slice.call( arguments )))
} // упращение, сущности данной функции
Не так, а скорее так(но тут не учитывается прототип):
Function.prototype.bind = function(contextObject){
let funkToBind = this,
args = Array.prototype.slice.call(arguments,1)
return function() {
return funkToBind.apply( contextObject , args.concat(Array.prototype.slice.call( arguments )))
}
}