您的位置:首页 > 科技 > IT业 > 手写call、apply、bind

手写call、apply、bind

2024/10/6 12:30:26 来源:https://blog.csdn.net/qq_64000756/article/details/142185723  浏览:    关键词:手写call、apply、bind

一、手写call

const person = {name:'zhangsan'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA + numB
}// 手写call
Function.prototype.mycall = function(thisArg,...args){ // 手写callconst key = Symbol('key') // 唯一标识符thisArg[key] = this // 绑定thisconst res = thisArg[key](...args) // 展开参数delete thisArg[key] // 清除return res
}const res = foo.mycall(person,1,2) // thisArg = person
console.log(res)

二、手写apply

Function.prototype.myapply = function(thisArg,args){const key = Symbol('key')thisArg[key] = thisconst res = thisArg[key](...args)delete thisArg[key]return res
}const person = {name:'zhangsna'}
function foo(numA,numB){console.log(this)console.log(numA,numB)return numA+numB
}
const res = foo.myapply(person,[1,2])
console.log(res)

三、手写bind

// 手写bind
Function.prototype.myBind = function(thisArg,...args){// 返回新函数return (...reArgs)=> this.call(thisArg,...args,...reArgs)
}const person = {name:'zhangsan'}
function foo(numA,numB,numC,numD){console.log(this)console.log(numA,numB,numC,numD)return numA + numB + numC + numD
}
const bindFunc = foo.myBind(person,1,2)
const res = bindFunc(3,4)
console.log(res)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com