function sum(){ console.log(this.name) } Function.prototype.mycall=function(myobj,...args){ if(typeOf myobj==='Function'){ throw new TypeError('error') } const fn=symbol('fn') //唯一值 myobj=myobj || window //若没有传入对象,则绑定到window上 myobj[fn]=this //把函数赋值到对象的某个属性 const result=myobj[fn](...args) delete myobj[fn] //删除fn声明 return result } const obj={ name:'泪痕' } sum.mycall(obj) //泪痕
以上就是手动实现call的代码
function sum(){ console.log(this.name) } Function.prototype.myapply=function(myobj,args){
if(typeOf myobj==='Function'){ throw new TypeError('error') } const fn=symbol('fn') //唯一值 myobj=myobj || window //若没有传入对象,则绑定到window上 myobj[fn]=this //把函数赋值到对象的某个属性 const result=myobj[fn](...args) delete myobj[fn] //删除fn声明 return result
}
const obj={ name:'泪痕' } sum.myapply(obj,[]) //泪痕
以上就是实现一个apply的代码
function sum(){
console.log(this.name)
console.log(arguments)
}
Function.prototype.mybind=function(myobj,...args){
if(typeOf myobj==='Function'){ throw new TypeError('error') }
let self=this
let bound=function(){
self.apply(this instanceof self ? this: myobj,args.concat(Array.prototype.slice.call(arguments)) }
}
const obj={name:'泪痕'} sum.mybind(obj,1,2,3)//泪痕
以上就是实现bind的的方法