JavaScript教程-33-浅析call()、apply()

1:每个方法都包含两个非继承来的方法 call 和 apply。

 

2:这两个方法的主要的作用就是用来设置方法中的this 指代的对象。可能这么说上去比较抽象。我先简单解释一下。任何的方法中都有一个this。上节课我们说过this指代了当前调用方法的对象。可能是window、也可能是某一个对象。那么call 和 apply的作用就是当我们使用某个方法的时候,可以通过call 和 apply 来设置改变 方法中的this 指代的对象。

 

3:带来的好处:

-- 可以让函数的作用域得到了扩充。

-- 可以让函数和对象解耦。

 

4:看示例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>call和apply的使用</title>
		<script type="text/javascript">
			var name = "小刚";
			var age = 19;
			
			//创建一个学生对象,可以使用如下的方式去定义对象的属性和方法
			var stu = {
				name:"小红",
				age:17,
				show:function(){
					alert("age = "+this.age + "  name = "+this.name);
				}
			};
			
			//这里的this,指代的是当前stu 对象。所以 age 和 name ,都是学生对象的属性。
			stu.show();//age = 17  name = 小红
			
			//创建一个新的对象
			var stu1 = {
				name:'小兰',
				age:'16'
			}
			//如果我们希望stu1 也可以使用 stu 的show 方法。可以通过如下的方式进行
			//下面的代码是重点
			stu.show.call(stu1);//age = 16  name = 小兰
			//通过上面的这个例子,我们看到了。show 方法中的this 可以被call 方法设置为了stu1对象。
			
			var stu2 = {
				name:'小马',
				age:'15'
			}
			//同样可以使用 apply 实现上述的效果,输出的效果是一致的。
			stu.show.apply(stu2);//age = 15  name = 小马
			
			
			//call 和 apply 的区别 只在于 对有参数方法的调用。下面看例子。
			function sum(a,b){
				return a + b;
			}
			function add(a,b){
				//这个例子我们只是为了展示有参数的两个方法的区别。
				//我在这里要使用sum方法来实现add 的功能 可以使用如下的方式
				return sum.call(this,a,b);
				
				//如果要使用apply替代call的话是这样的
				//当然两个return 只能保留一个,语法就是这样的
//				return sum.apply(this,[a,b]);
			}
			alert(add(1,2));//3
			
			//总结:call 和 apply的功能是类似的,都是用来重新设置方法中的this指代的对象的。
			//两者的语法不同,第一个参数都是要设置的对象,
			//后续的参数,如果是call方法,那么就将方法的参数逐个写入即可。
			//如果是apply 方法,那么所有的参数都要放到一个数组中才可以。
		</script>
	</head>
	<body>
	</body>
</html>

PS:笔者有大量的学习资料:java、python、大数据、人工智能、前端等。需要的小伙伴请加群:711408961

笔者的b站中有一些教学视频分享。感兴趣的小伙伴可以关注:https://space.bilibili.com/412362068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值