call ,apply ,bind 函数的模拟实现

书到用时方恨少,事非经过不知难。这篇文章主要讲述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 函数的模拟实现】 

    推荐阅读