美文网首页
js中call()、apply()、bind()的用法

js中call()、apply()、bind()的用法

作者: bryan_liu | 来源:发表于2022-06-06 14:04 被阅读0次
    var name = '小王',age = 17
    var obj =  {
        name: '小张',
        objAge: this.age,
        myFun: function() {
            console.log(this.name + '年龄' + this.age)
        }
    }
    //obj.objAge  //17
    //obj.myFun() //小张年龄 undefined
    
    var str = '李青'
    function show() {
        console.log(this.str )
    }
    show()  //李青
    

    第一个打印的this指向obj,第二个全局声明的show函数this指向window

    call()、apply()、bind()都是用来重定义this这个对象

    var db = {
        name: '德玛西亚',
        age: 99
    }
    obj.myFun.call(db,  '成都',  '上海')  // 德玛 年龄 99  来自 成都去往上海
    obj.myFun.apply(db,  ['成都',  '上海'])  // 德玛 年龄 99  来自 成都去往上海
    obj.myFun.bind(db,  '成都',  '上海')()  // 德玛 年龄 99  来自 成都去往上海
    obj.myFun.bind(db,  ['成都',  '上海'])()  // 德玛 年龄 99  来自 成都去往undefined
    

    call、apply、bind这三个函数的第一个参数都是this的指向对象,差别在第二个参数
    call的第二个参数至最后一个参数都是直接放进去,用逗号隔开,obj.myFun.call(db,'成都',...,'n')
    apply的所有参数都必须放在一个数组传进去,obj.myFun.apply(db,['成都',...,'n'])
    bind返回的是一个函数,参数和call一样
    三者的参数都不限于字符串,可以是数组,函数,对象等。

    相关文章

      网友评论

          本文标题:js中call()、apply()、bind()的用法

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