美文网首页
call, apply, bind, caller, calle

call, apply, bind, caller, calle

作者: TheoLin | 来源:发表于2019-01-07 15:24 被阅读0次
    call: 执行一个方法,将其执行环境转换成第一个参数,后续参数为此方法的参数,call(obj, param1,...,paramX);
    //情况一
    var a = 1
    Object.prototype.toString.call(a) //[object Number]
    //情况二
    var a = function(){
      return this.a
    }
    var b = {
      a: 1
    }
    a.call(b) // 1
    
    apply:和call作用相似,后续参数以一个数组传入, apply(object, [param1,..,paramX])
    var a = function(num1, num2){
        return num1 + num2 + this.initNum
    }
    var b = {
      initNum: 100
    }
    a.call(b, 1, 2) //103
    a.apply(b, [1, 2]) //103
    
    bind: 将一个函数的执行环境绑定为传入参数,返回绑定后的函数,此函数无论在哪里调用,执行环境永远为传入参数
    function a(){
      return this.name
    }
    var b = {name:'Theo'}
    var c = a.bind(b)
    c() //Theo
    var d = {
      name: 'hello',
      showName: c
    }
    d.showName() //Theo
    
    caller:返回一个函数的引用,其实为该函数的执行环境。
    //情况一
    var a = function(){
      return a.caller
    }
    a() // 因为是在全局环境下,此处返回null
    
    //情况二
    var a = function(){
      return a.caller
    }
    var b = function(){
      return a()
    }
    b() // 因为是b的函数环境下执行caller,所以此处返回b
    
    callee:arguments的一个属性,返回这个该函数。
    var a = function(){
      return arguments.callee
    }
    a() //返回a的
    

    相关文章

      网友评论

          本文标题:call, apply, bind, caller, calle

          本文链接:https://www.haomeiwen.com/subject/bbrurqtx.html