71.call和apply

<!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>
上一篇:手写防抖和节流中的一些细节


下一篇:Js中this指向