美文网首页
js读书笔记,对call,apply, bind的一些理解(通俗

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

作者: 夜雨渐停丶我独行 | 来源:发表于2019-10-09 11:55 被阅读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第二个参数接收的所需参数的数组合集

    相关文章

      网友评论

          本文标题:js读书笔记,对call,apply, bind的一些理解(通俗

          本文链接:https://www.haomeiwen.com/subject/qugwpctx.html