美文网首页
对js中call和apply的理解(一)

对js中call和apply的理解(一)

作者: 打不过就加入他 | 来源:发表于2016-07-22 01:39 被阅读265次
    function People(){
    }
    People.prototype = {
          age: 26,
          say: function(){
            alert(this.age)
          }
    }
    
    new People().say() // 26
    //如果此时有个child对象,也想使用say方法,但是我不想再b对象下在定义一个同样功能的say方法,此时call,apply就派上用场了
    var child = {age: 38};
    new People().say.call(child) //38
    

    从这里可以看出,其实call或者apply都是为了动态改变this指针而出现的child本身没有say()方法,却希望使用say方法,所有使用call,将people类的指针动态指向child,从而alert自己的age参数

    function a(){
      console.log(Array.prototype.slice.call(arguments));
    }
    a(1,2,3,4,5)   //[1, 2, 3, 4, 5]
    

    像arguments这种类数组对象,可以调用Array的slice方法来将arguments进行分割处理(arguments是类数组对象,可以理解为[1,2,3,4,5].slice())


    apply、call的不同之处

    function foo(arg1,arg2){
        console.log(arg1,arg2)
    }
    var c = {}
    foo.call(c,1,2,3)   //1,2    
    foo.apply(c,[1,2,3]) //1,2
    

    不同之处就在于call和apply的参数传入方式不同。

    相关文章

      网友评论

          本文标题:对js中call和apply的理解(一)

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