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

2022-06-06  本文已影响0人  bryan_liu
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一样
三者的参数都不限于字符串,可以是数组,函数,对象等。

上一篇 下一篇

猜你喜欢

热点阅读