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