大家好,小弟刚入门,看书的时候偶然发现这么一句话,便感觉到非常疑惑,可能是小弟理解有问题:fun.apply(obj,b)的作用就是让被调用的函数fun的this指向obj,但是这句话里fun函数本来就属于this,如果这样调用“this.fun(args)”也能够达到相同的效果,为什么要使用apply呢?javascript

解决方案 »

  1.   

    其实你已经知道apply的功能了,就是用来改变主体this
    例:
    obj1={msg:1};
    obj2={msg:2};
    function show(){ alert( this.msg ) }
    show.apply(obj1);
    show.apply(obj2)
      

  2.   

    var obj1 = {
      name : 'obj1 name'
    } , obj2 = {
      name : 'obj2 name'
    } , name = 'window name';
    function applyDemo(){
      alert(this==obj1);
      alert(this==obj2);
      alert(this==window);
      alert(this.name);
    }
    applyDemo();//this默认指向window对象
    applyDemo.apply(obj1);//用apply改变作用域,使this指向obj1
    applyDemo.apply(obj2);//用apply改变作用域,使this指向obj2
    运行上面一段代码应该就明白了吧,和apply功能类似的还有一个call,它们两者的区别就是传参方面,apply接受一个数组,call接收不是。
      

  3.   

    谢谢,我是知道apply的用法,我就是想问this.fun.apply(this,args)和this.fun是不是等价的?
      

  4.   

    this.fun.apply(this,args)和this.fun
    如果这两个地方的this相等,就是等价的
      

  5.   

    谢谢,我看很多地方这么写,还以为有什么特殊之处。
    但是这也很奇怪,他们都不直接写this.fun()而写this.fun.apply(this,args),可能是参数用数组传入的缘故罢