call()方法的实现
call()方法的实现
let name = "五六七" function test(a,b){ console.log(this.name) console.log(a+b) } const person = { name : "暗影刺客" } Function.prototype.myCall = function(obj) { if(typeof this !== 'function'){ throw new Error('not a function') } obj = obj || window obj.p = this let res = arguments[1]?obj.p(...Object.values(arguments).slice(1)):obj.p() // 切割参数的代码也可以这样实现 Array.prototype.slice.call(arguments,1)
delete obj.p return res } test.myCall(person,2,3)
apply():和call基本上一致,唯一区别在于传参方式,具体来说apply把需要传递给fn的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给fn一个个的传递
bind():语法和call一模一样,区别在于立即执行还是等待执行,bind方法的返回值是函数。

浙公网安备 33010602011771号