call ,apply ,bind 函数的模拟实现
Posted fmkeke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了call ,apply ,bind 函数的模拟实现相关的知识,希望对你有一定的参考价值。
call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。
apply 方法,类似,不同点在于, apply 方法传入的第二个参数 是一个数组,
实现步骤
改变函数的his指向
调用该方法
删除方法
function foo(){ console.log(this.name); } var obj = {} ; obj.name = "hei" // foo.call(obj) Function.prototype.call3 = function(obje){ obje.fn = this // 获取函数本身 // 调用函数 obje.fn() // 删除 delete obje.fn } foo.call3(obj)
接下来是传入指定参数:
Function.prototype.call3 = function(obje,arg){ obje.fn = this // 获取函数本身 // 调用函数u obje.fn(arg) // 删除 delete obje.fn } foo.call3(obj,"新参数")
但是参数 数量不一定 所以要使用 arguments,从第二个参数开始取
Function.prototype.call3 = function(obje,arg,arg2){
var args = []
obje.fn = this
for(var i=1;i <arguments.length; i++){
args.push(arguments[i])
}
// 获取函数本身
// 调用函数u
obje.fn(...args)//es6 扩展符
// 删除
delete obje.fn
}
到这,基本完成, 但是还需要判断,当传入的 参数为 null ,this 指向window
以上是关于call ,apply ,bind 函数的模拟实现的主要内容,如果未能解决你的问题,请参考以下文章
call() apply() bind()方法 以及实现bind()方法