1、Call和Apply的作用完全一样
2、Call传递的是单个参数,Apply传递的是一个数组参数
3、Call和Apply可理解为--被准许使用的意思
打个比方,之前农村家里比较穷,农村也没有路灯啥的,一到晚上到处是漆黑一片,那个时候也没有几家有手电筒的,自己家没有怎么办,就要到别人家里借,不然走夜路真的怕!
//亲戚家
var otherHome = {
tips: '我家有电筒',
flashLight: function(meg){
if(!meg) meg = '';
console.log(this.tips + meg)
}
}
//我的家
var myHome = {
tips:'我的家穷啊,',
}
otherHome.flashLight();//我家里有电筒
otherHome.flashLight.call(myHome,'借你家电筒用一下');//我的家穷啊,借你家电筒用一下
//理解为亲戚允许我使用他家的电筒了
//现在我的家可以说是这个样子的
var myHome = {
tips:'我的家穷啊,',
//注意:下面的代码不是真的在myHome里了,只是在执行
//otherHome.flashLight.call(myHome,'借你家电筒用一下')的时候类似于下面这种形式而已
//你可以打印一下myHome其实还是没变的,
//当然,手电筒怎么可能真给你,只是借你用一下而已
flashLight: function(meg){
if(!meg) meg = '';
console.log(this.tips + meg)
}
}
作者:zsbox
链接:https://www.zhihu.com/question/20289071/answer/222203336
来源:知乎