- call:第一个参数是为函数内部指定this指向,后续的参数则是函数执行时所需要的参数,一个一个传递。
- apply:第一个参数与call相同,为函数内部this指向,而函数的参数,则以数组的形式传递,作为apply第二参数。
- call 的性能更好,不过 lodash 里的源码当参数小于等于 3 时用 call,之后用 apply
call:
Function.prototype.myCall = function(obj, ...arg) {
if(typeof this !== 'function'){
throw new TypeError(this + ' is not a function');
}
const context = obj;
const fn = Symbol();
context[fn] = this;
const ret = context[fn](...arg)
delete context[fn]
return ret;
}
apply:
Function.prototype.myApply = function(obj, arg) {
if(typeof this !== 'function'){
throw new TypeError(this + ' is not a function');
}
const context = obj;
const fn = Symbol();
context[fn] = this;
const ret = context[fn](...arg)
delete context[fn]
return ret;
}