call参数多个
bind参数2个,第二个是数组
bind参数多个,返回的是一个函数
参考小伙伴:github.com/mqyqingfeng…
var sb = {
name: 'sb'
}
function bar(){
console.log(this.name);
}
// call实现
Function.prototype.myCall = function(context){
if(typeof this !=='function') return;
var obj = context || window;
obj.fn = this;
var argArr = [...arguments].slice(1);
var result = obj.fn(...argArr);
delete obj.fn;
return result;
}
bar.myCall(sb)
// apply
Function.prototype.myApply = function(context){
if(typeof this !== 'function') return;
var obj = context || window;
obj.fn = this;
var argsArr = [...arguments].slice(1);
var result = obj.fn(context, argsArr);
delete obj.fn;
return result;
}
bar.myApply(sb);
// bind
Function.prototype.myBind = function(context){
if(typeof this !== 'function') return;
var that = this;
var argsArr = [...arguments].slice(1);
return function Fn(){
return that.apply( this instanceof Fn? this : context, argsArr);
}
}
var sbb = bar.myBind(sb);
sbb();