在远古时代,存在着两个人, 一个是托尼, 一个是肥宅 。 托尼一直在默默得陪伴着女朋友西施,直到有一天他遇到了贪玩蓝月。他非常喜欢这款游戏,但是他很苦恼,他没有电脑玩。也许是上天的安排,又或者是他的真诚感动了上帝,在某个特殊的日子,他遇上了名为“肥宅”的奇男子。他没有女朋友,也没有贪玩蓝月,但是他有电脑,而这,正是他所欠缺的。于是他向“肥宅”借了电脑来玩游戏,终于,他玩到了他想玩的贪玩蓝月。“贪玩蓝月,你从未体验过得船新游戏,是兄弟,就来砍我!”
call,apply,bind单个参数区别
例子:
var toney = {
name: '托尼',
girlFriend: '西施',
game: '贪玩蓝月',
accompany: function() {
console.log(this.name +":在吃"+ this.fruits)
}
}
var katie = {
name: '肥宅',
game: '文明6',
computer: '外星人',
play: function(time, state) {
if(time) {
console.log(this.name +":在玩"+ this.game +",玩了" + time +"分钟,"+ state )
}else {
console.log(this.name +":在玩"+ this.game)
}
}
}
单个参数
// 单个参数用法
katie.play.call(toney) //托尼:在玩贪玩蓝月
katie.play.apply(toney) //托尼:在玩贪玩蓝月
katie.play.bind(toney)() //托尼:在玩贪玩蓝月
多个参数
// 多个参数用法
katie.play.call(toney, 60, '就不玩了!') //托尼:在玩贪玩蓝月,玩了60分钟,就不玩了!
katie.play.apply(toney, [120, '还在继续玩。']) //托尼:在玩贪玩蓝月,玩了120分钟,还在继续玩。
katie.play.bind(toney, 240, '觉得越来越好玩了!')() //托尼:在玩贪玩蓝月,玩了240分钟,觉得越来越好玩了!
最后总结
call,apply,bind都是通过改变函数内部this指向来实现“借用”。
单个参数:
call,apply,bind都是传入需要借用的对象,bind返回的是一个新函数,必须调用才会被行。
多个参数:
bind,call第二个参数开始接受多个所需参数
apply第二个参数接收的所需参数的数组合集