function fun(a,b){
console.log("a = "+ a);
console.log("b = "+ b);
alert(this);
}
var obj= {
name:"obj",
sayName:function(){
alert(this.name);
}
};
/**
* call() 和 apply()
* -这两个方法都是函数对象的方法 需要通过函数对象来调用
* -当对函数调用call() 和 apply() 都会调用函数执行
* 在调用call() 和 apply() 可以将 一个对象指定为第一个参数
* 此时 这个函数将会成为函数执行时的this
*
* call() 方法可以将实参在对象之后依次传递
* apply() 方法需要将实参封装到一个数组中统一传递
*
* -this的情况
* 1 以函数形式调用时, this 永远都是window
* 2 以方法的形式调用时, this 是调用方法的对象
* 3 以构造函数的方法调用时,this 是新创建的那个对象
* 4 使用 call 和 apply 调用时,this 是 指定的那个对象
*/
// fun.call(obj,2,3)
fun.apply(obj,[2,3])
var obj2= {name:"obj2"};
//fun() // [object Window]
// fun.call(); // [object Object]
// fun.apply(); //[object Window]
//fun.call(obj); //[object Object]
//fun.apply(obj2); //[object Object]
// obj.sayName.apply(obj2);