1. 程式人生 > 其它 >函式的方法call()和apply()

函式的方法call()和apply()

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			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.apply();
			fun.call();
			fun();*/

			//fun.call(obj);
			//fun.apply(obj);

			//fun();
			
			//obj.sayName.apply(obj2);
		</script>
	</head>

	<body>
	</body>

</html>