javascript中call和apply方法

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

输出结果:
function fun(a,b){
console.log(“a =”+a);
console.log("b = "+b);
alert(this.name);
}

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

输出结果:
[Web浏览器] “a =2” /初级教程08/02函数的方法.html (9)
[Web浏览器] “b = 3” /初级教程08/02函数的方法.html (10)
[Web浏览器] “a =2” /初级教程08/02函数的方法.html (9)
[Web浏览器] “b = 3” /初级教程08/02函数的方法.html (10)
[Web浏览器] “a =undefined” /初级教程08/02函数的方法.html (9)
[Web浏览器] “b = undefined” /初级教程08/02函数的方法.html (10)

猜你喜欢

转载自blog.csdn.net/plannothing/article/details/107744814
今日推荐