js读书笔记,对call,apply, bind的一些理解(通俗

2019-10-09  本文已影响0人  夜雨渐停丶我独行

在远古时代,存在着两个人, 一个是托尼, 一个是肥宅 。 托尼一直在默默得陪伴着女朋友西施,直到有一天他遇到了贪玩蓝月。他非常喜欢这款游戏,但是他很苦恼,他没有电脑玩。也许是上天的安排,又或者是他的真诚感动了上帝,在某个特殊的日子,他遇上了名为“肥宅”的奇男子。他没有女朋友,也没有贪玩蓝月,但是他有电脑,而这,正是他所欠缺的。于是他向“肥宅”借了电脑来玩游戏,终于,他玩到了他想玩的贪玩蓝月。“贪玩蓝月,你从未体验过得船新游戏,是兄弟,就来砍我!”

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第二个参数接收的所需参数的数组合集

上一篇下一篇

猜你喜欢

热点阅读