模拟实现call、apply、bind方法

模拟实现call方法

Function.prototype.myCall=function(context) {
var context = context || window;
context.fn=this;
var arg=[...arguments].slice(1)
var result=context.fn(...arg)
delete context.fn
return result
}

模拟实现apply方法

Function.prototype.myApply=function(context){
var context=context||window;
context.fn=this
var result;
if(arguments[1]){
result=context.fn(...arguments[1])
}else{
result=context.fn()
}
delete context.fn
return result

模拟实现bind方法

Function.prototype.myBind=function(context){
if(typeof this !=='function'){
throw new TypeError('error')
}
var _this=this;
var arg=[...arguments].slice(1)
return function F(){
if(this instanceof F){
return new _this(arg,...arguments)
}else{
return _this.apply(context,arg.concat(...arguments))
}
}

}

共有 0 条评论

Top