call和apply
相同点:改变 函数 中的this指向。
不同点:传参方式不同,target.call(source,param1,param2,…)
target.apply(source,[param1,param2,…])
let MaBaoGuo = {
skill: '一鞭,二鞭,三鞭,四鞭,五鞭,收!',
word: '啊!我大意了,没有闪!',
wuLianBian: function () {
return "给大家展示,看好喽!" + this.skill+this.word;
},
Boxing : function (skill,word) {
return this.word+"我是老同志,我会" + skill+word;
},
}
let AoLiGei = {
word: '年轻人,耗子尾汁!'
}
//正常执行
MaBaoGuo.wuLianBian() //给大家展示,看好喽!一鞭,二鞭,三鞭,四鞭,五鞭,收!啊!我大意了,没有闪!
//将函数MaBaoGuo.wuLianBian中的this指向变更为默认,window,因为window并无这两个属性,所以打印均为undefined
console.log(MaBaoGuo.wuLianBian.call()); //给大家展示,看好喽!undefinedundefined
//将MaBaoGuo.wuLianBian中的this指向AoLiGei,AoLiGei中没有skill。则只有年轻人,耗子尾汁!
console.log(MaBaoGuo.wuLianBian.call(AoLiGei)); //给大家展示,看好喽!undefined年轻人,耗子尾汁!
// this指向AoLiGei,且向方法内传参
console.log(MaBaoGuo.Boxing.call(AoLiGei,"混元意形拳!","年轻人,不讲武德!")); //年轻人,耗子尾汁!我是老同志,我会混元意形拳!年轻人,不讲武德!
console.log(MaBaoGuo.Boxing.apply(AoLiGei,["混元意形拳!","年轻人,不讲武德!"]));//年轻人,耗子尾汁!我是老同志,我会混元意形拳!年轻人,不讲武德!