书到用时方恨少,事非经过不知难。这篇文章主要讲述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 函数的模拟实现】
推荐阅读
- airtest+pytest实战教程05—登录智学网app
- SAS变量使用详细图解
- SAS数值数据格式详细图解
- SAS字符串用法详细图解
- SAS运算符用法详细图解
- 什么是SAS宏(宏用法详解)
- SAS函数用法详细图解
- uniapp中使用阿里巴巴图标iconfont
- 如何在Windows 10上安装.Appx或.AppxBundle软件