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

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一样
三者的参数都不限于字符串,可以是数组,函数,对象等。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容