问答详情
源自:6-3 [JavaScript]this

关于call的使用

function add(c,d){

 			return this.a +this.b+c +d;
 		}

 		var o ={a:1,b:3};

 		add.call(o,1,10);
 		

这里在定义function add的时候,没有定义ab变量,为什么不会报错呢?老师说这个call使用之后,1 和10就会传给add里面的c 和d,然后add里面的a和b就是o里面的a和b???是不是因为都是a和b所以就是一样的???如果o里面的不是a和b呢?

提问者:深夏之叶 2016-10-18 21:10

个回答

  • weibo_陈杰夫长颈鹿_03237116
    2016-10-18 22:17:04
    已采纳

    关于add.call(o,1,10);你可以理解为,对象o中有了add这个方法,即:

    var o{

    a:1,

    b:3,

    // 在对象o中新增加了 

    function add(c,d){

     

               return this.a +this.b+c +d;

           }

     

     return this.a +this.b+c +d

    }

    此时的a,b就是1,3;而1,10就是c,d

  • 勇闯极限
    2016-10-18 22:39:51

    call和apply可以按你说的这样,那bind方法呢?

  • 勇闯极限
    2016-10-18 22:31:56

    上边这位说的很到位,其实就是相当于个o对象添加了一个方法而已,只不过这个方法没有定义在对象的内部,相当于吧一个函数的方法用call方法调用给了这个对象。

  • 勇闯极限
    2016-10-18 22:08:47

    定义函数可以传入参数也可以不传入参数,因为函数对象默认会有arguments内置方法来保存函数调用时实际传入的参数。这个add函数定义时没有传入啊,a,b参数但是上边的函数是为下方o对象调用call方法是调用函数的this.a和this.b来使用,相当于对象调用函数对象那个的方法来使用。call方法第一个传入要绑定this的对象,后边传入单个参数。如果还不理解就上网查call和apply和bind的具体用法。