码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2020-06-20 21:05:03      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:nts   div   window   步骤   color   code   style   console   this   

  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 函数的模拟实现

标签:nts   div   window   步骤   color   code   style   console   this   

原文地址:https://www.cnblogs.com/fmkeke/p/13170193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!