<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>call和apply</title>
<script type="text/javascript">
/*
call()和apply()
- 这两个方法都是函数对象的方法,需要通过函数对象调用
- 当对函数调用call()和apply()都会调用函数执行
- 在调用cal1()和apply()可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this,这样就可以改变函数执行时的this了
*/
//创建一个函数
function fun(a,b){
console.log(this);
console.log("a = "+a);
console.log("b = "+b);
}
//创建两个对象
var obj = {name:"小白"};
var obj2 = {name:"杨杰学"};
//调用call的时候传入obj
//fun.call(obj);//{name: "小白"}
//fun.apply(obj);//{name: "小白"}
//call()方法可以将实参在对象之后依次传递
//fun.call(obj,1,2);//{name: "小白"},a = 1,b = 2
//apply()方法需要将实参封装到一个数组中统一传递
/*
像call那样传参数的话,会报错
*/
//fun.apply(obj,1,2);//报错
fun.apply(obj,[1,2]);//{name: "小白"},a = 1,b = 2
/*
this总结
1.以函数形式调用时,this永远都是window
2.以方法的形式调用时,this是调用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.使用call和apply调用时,this是指定的那个对象
*/
</script>
</head>
<body>
</body>
</html>