call,apply,bind原生实现
if(!Function.prototype.myCall){
Function.prototype.myCall = function(){
var args = Array.from(arguments)
var context = args.shift()
var fn = this
Object.defineProperty(context,"fn",{
value:fn,
configurable:true
})
context.fn(...args)
delete context.fn
}
}
if(!Function.prototype.myApply){
Function.prototype.myApply = function(){
var args = Array.from(arguments)
var context = args.shift()
var params = args.shift()
var fn = this
Object.defineProperty(context,"fn",{
value:fn,
configurable:true
})
params ? context.fn(...params) : context.fn()
}
}
if(!Function.prototype.myBind){
Function.prototype.myBind = function(){
var args = Array.from(arguments)
var context = args.shift()
var fn = this
Object.defineProperty(context,"fn",{
value:fn,
configurable:true
})
return function(){
var oargs = Array.from(arguments)
oargs = args.concat(oargs)
context.fn(...oargs)
delete context.fn
}
}
}