JavaScript 函数 apply的使用

apply的语法

function.apply(obj,[...args])

apply最多两个参数,并且第2个参数为数组。

apply的作用是什么呢?和上一篇call的意思是一样的,就是参数有区别,这就拿过来了

通俗来说:

我手机没电了,借朋友的手机发个短信,注意是借用,当你用完以后你“朋友手机的短信功能”对你来说就失效了,除非你再次借用。

这里就有两个对象我、朋友,那短信功能就是所说的方法

先来创建“我”这个对象和方法(因为手机没有电了,所以没有发短信的方法,注释掉就好):

var me={
	name:'我',
	/*sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}*/
}

再来看朋友A对象

var friendA={
	name:'朋友A',
	sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}
}

我们来调用一下方法发送给朋友B短信

var me={
	name:'我',
	/*sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}*/
}

var friendA={
	name:'朋友A',
	sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}
}

friendA.sendMsg('朋友B','你好啊老朋友!');
me.sendMsg('朋友B','你好啊老朋友!');

得到的结果是:

【朋友A】给【朋友B】发送了短信:你好啊老朋友!
Uncaught TypeError: me.sendMsg is not a function

可以看到朋友A正常的给朋友B发送了短信,然后我就发送不成功,为什么,因为“我”这个对象没有发送短信的方法,手机没电了,那怎么办,用apply函数来借一下朋友A的手机:

这样用:friendA.sendMsg.apply(me,['朋友B','你好啊老朋友!']);

friendA.sendMsg 是要借用的方法

me 是谁要借用

['朋友B','你好啊老朋友!'] 传入的实参,这里是以数组的形式来传

完整代码如下:

var me={
	name:'我',
	/*sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}*/
}

var friendA={
	name:'朋友A',
	sendMsg:function(target,content){
		console.log("【"+this.name+"】给【"+target+"】发送了短信:"+content);
	}
}

friendA.sendMsg('朋友B','你好啊老朋友!');
//me.sendMsg('朋友B','你好啊老朋友!');

friendA.sendMsg.apply(me,['朋友B','你好啊老朋友!']);

输出结果:

【朋友A】给【朋友B】发送了短信:你好啊老朋友!
【我】给【朋友B】发送了短信:你好啊老朋友!

朋友A和我都通过朋友A的手机向朋友B问好了,效果达到了,手机要还给朋友A,因为我的手机还是没有电,所以我还是没有发送短信这个功能!

总结一下:

apply与call作用是一样的,就是参数有所区别,call把参数放到对象的后面,一个接着一个,function.call(obj,arg1,arg2,arg3...)

而apply参数最多2个 function.apply(obj,[arg1,arg2,arg3...])

也就是说把call里面传的参数统统放到一个数组里面给apply的第2个参数使用,第一个绑定的对象参数是一样的不用变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程界小明哥

请博主喝瓶水,博主持续输出!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值