call()方法实现
Function.prototype.myCall = function (context) {
let ctx = context || window;
ctx.fn = this;
let args = [...arguments].slice(1);
let res = ctx.fn(...args);
delete ctx.fn;
}
apply()方法实现
Function.prototype.myApply = function(context) {
let ctx = context || window;
ctx.fn = this;
let args = [].concat(...arguments).slice(1);
let res = ctx.fn(...args);
delete ctx.fn;
}
bind()方法实现
Function.prototype.myBind = function(context) {
let ctx = context || window;
ctx.fn = this;
let args = [...arguments].slice(1);
return function() {
return ctx.fn.apply(ctx, args);
}
}