一文看懂JavaScript中的call()与apply()方法

一、call()与apply()是什么

两个都是函数对象的方法,当调用这两个方法时都会执行这个函数
如果不懂函数的方法看这个

二、call()与apply()的作用共同点

  • 1.传入的第一个参数是对象
  • 2.改变this指针指向,复用已有方法,传入哪个对象,this指哪个对象
  • 3.都可以利用第一个之后的参数传实参

举例说明前两个共同点

<script type="text/javascript">
	//创建一个对象
	obj={
	   name:"obj",
	   sayname:function(){
		   alert(this.name);
	   }
	};

	obj1={
	   name:"obj1"
	};

	obj.sayname.apply(obj1);//输出obj1
	obj.sayname.call(obj1);//输出obj1
</script>

第一个共同点:从传参来看,call与apply的第一个参数是一个对象
第二个共同点:从输出结果可以看出,alert方法中this是obj1,这便是通过call与apply方法改变了this的指向,从指向obj变成指向obj1。this指向博客
原本obj1中没有sayname方法,通过call与apply方法复用了obj的方法
第三个共同点放到区别中去说

三、call()与apply()的区别

区别:都可以利用第一个之后的参数传实参,传实参的形式不同

  • call()方法可以将实参在对象之后依次传递
  • apply()方法需要将实参分装到一个数组中统一传递

举例说明

<script type="text/javascript">
   function fun(a,b){
		console.log("a="+a);
		console.log("b="+b);
   }
   obj2={
		name:"obj2"
   };
   
   fun.call(obj2,1,2);//输出a=1,b=2
   fun.apply(obj2,[1,2]);//输出a=1,b=2
</script>

fun.call(obj2,1,2);//输出a=1,b=2
fun.apply(obj2,[1,2]);//输出a=1,b=2
从这两行就可以看出,apply传参需要放到数组中

四、总结

call()与apply()的作用共同点

  • 1.传入的第一个参数是对象
  • 2.改变this指针指向,复用已有方法,传入哪个对象,this指哪个对象
  • 3.都可以利用第一个之后的参数传实参

区别

  • 传实参的形式不同,apply方法统一放到数组中
发布了198 篇原创文章 · 获赞 94 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/shang_0122/article/details/104652683