js中的函数对象有定义时上下文,运行时上下文,上下文是可以改变的 这些概念。
举个例子
function a(c){
alert(c)
alert(this.b)
}
d={b:'哈哈'}
//如果直接运行a();那么a函数是用window调用的,里面的this指window,window对象当然没有b属性了,但是下面的函数将a函数运行时的上下文替换成了d对象,也就是d对象调用a函数,那么this就指代d对象,后面是传入的参数。
a.call(d,‘嘿嘿’);
call和apply的唯一不同就在于,call是按照顺序进行传参,而apply要将参数封装成一个数组进行传参,所以当参数个数不定时,要用apply