认识上下文调用模式
上下文调用模式就是改变context的执行方式,也就是修改函数的调用方式,也就是修改this的值
来看个具体的例子
var name = "里奥梅西";
function sayHello(a, b) {
console.log(this.name + "进了"+ (a * b) + "个球");
}
var obj = {
name:"C罗"
}
sayHello();
//如果此时直接调用sayhello方法,它会去全局中找name,打印的是里奥梅西进了多少球,那如果想打印梅西呢,就需要改变函数的调用模式,不再是全局调用模式,改变它的this指向的对象为obj。
//这时就用到了上下文模式
//apply和call方法。
var arr = [100,3]
sayHello(obj,arr);
console.log( sayHello(obj,arr);) //此时打印的便为C罗进了300个球。
如上述代码所示 apply和call可以修改this的值,也就是修改函数调用的上下文
下面来具体看一看两者的参数与区别:
函数.apply(对象,函数需要的参数列表(是一个数组));
函数.call(对象,函数需要的参数列表)
区别:
1.第一参数均为要把this改变为的那个对象
2.第二个参数是指函数需要参数,其中apply是用数组传递的,而call是用单个参数传递的
3.call用于确定了函数的形参有多少个的时候使用
apply用于函数的形参个数不确定的情况