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呢?
关于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
call和apply可以按你说的这样,那bind方法呢?
上边这位说的很到位,其实就是相当于个o对象添加了一个方法而已,只不过这个方法没有定义在对象的内部,相当于吧一个函数的方法用call方法调用给了这个对象。
定义函数可以传入参数也可以不传入参数,因为函数对象默认会有arguments内置方法来保存函数调用时实际传入的参数。这个add函数定义时没有传入啊,a,b参数但是上边的函数是为下方o对象调用call方法是调用函数的this.a和this.b来使用,相当于对象调用函数对象那个的方法来使用。call方法第一个传入要绑定this的对象,后边传入单个参数。如果还不理解就上网查call和apply和bind的具体用法。