众所周知,每个函数都包含两个非继承而来的方法:apply()与call() 方法,他们都可以接收参数,他们的作用都是一样的,都是在特定的作用域里面调用函数,相当于设置函数体内的this对象的值,这也是他们的强大之处,就在于可以扩充函数运行的作用域,下面 就用代码来说明他们的作用,来看两个demo:

demo1:     

       window.name = “Jack”;
      var person = {
        name:”Tom”
      }
      function who(){
        console.log(this.name);
      }
      who();        //Jack
      person.who = who;
      person.who();     //Tom

 

demo2:  

      window.name = “Jack”;
      var person = {
        name:”Tom”
      }
      function who(){
        console.log(this.name);
      }
      who(); //Jack
      who.call(this) //this指向全局 Jack
      who.call(window) //Jack
      who.call(person) //Tom

从两个demo对比来看 ,此时call(apply)的用法就是扩充作用域;

call与apply区别:

    call与apply的唯一的不同点就是传参问题了,apply可以接受两个参数,第一个参数指向作用域对象(this),第二个参数可以接收参数数组,也可以是arguments对象;call方法,第一个参数相同,第二个参数后面明确接收每一个参数,例如call(this,person1,person2…)

 

版权声明:本文为moying原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/moying/p/Avrilscript.html