2019.11.17

1.apply()和call()的区别

(1)apply():

Function.apply(obj,args)方法能接收两个参数
1.1obj:这个对象将代替Function类里this对象
1.2args:这个是数组,它将作为参数传给Function

(2)call():

Function.call(obj,[param1[,param2[,…[,paramN]]]])
2.1obj:这个对象将代替Function类里this对象
2.2params:这个是一个参数列表

以下给出一3个例子解释1.1和2.1的意思(来自菜鸟教程)

1var name = '小王,age = 17var obj = {
		name: '小张',
		objAge:this.age,
		myFun: funciton() {
			console.log(this.name + "年龄" + this.age
		}
	obj.objAge; // 17
	obj.myFun(); // 小张年龄 undefine2var fav = '流浪';
	function show() {
		console.log(this.fav)
	}
	show(); // 流浪

例1会出现undefine,而例2却正常显示的区别,就在于两者的this指向不同,
例1的this指向obj,例2指向的是全局对象window;

而apply和call的第一个参数就是重新定义这个this这个对象,例3如下

3
	var name = '小王,age = 17var obj = {
		name: '小张',
		objAge:this.age,
		myFun: funciton() {
		console.log(this.name + "年龄" + this.age
		}
	var a={
		name:'光头',
		age:100
		}
	obj.myFun.call(a); //光头年龄100
	obj.myFun.apply(a);//光头年龄100

2.2和1.2由例4解释:

	var name = '小王,age = 17var obj = {
		name: '小张',
		objAge:this.age,
		myFun: funciton(fm,t) {
			console.log(this.name + " 年龄 " + this.age + ' 来自 ' + fm + '去往' + t);
		}
	var a={
		name:'光头',
		age:100
	}
	obj.myFun.call(a,['成都','上海']); //光头 年龄 100 来自 成都去往上海
	obj.myFun.apply(a,'成都','上海');//光头 年龄 100 来自 成都去往上海

由此可见 call和apply的差别就在于apply后面的参数是一个数组对象,而call是以’,'隔开的字符传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值