不多说,直接上代码
回调函数中用call
更改函数的this指向,函数也会立即执行,返回值是函数的执行结果
var obj = {
name: 'Dot'
}
function test(callback){
console.log('callback:',callback)
callback();
}
test(function(){
console.log('name:',this)
}.call(obj))
//打印结果
//name: {name: "Dot"}
//callback: undefined
//Uncaught TypeError: callback is not a function
回调函数中用bind
更改函数的this指向,但是该函数不会立即执行,返回值是更改了this指向的函数
var obj = {
name: 'Dot'
}
function test(callback){
console.log('callback:',callback)
callback();
}
test(function(){
console.log('name:',this)
}.bind(obj))
// 打印结果
// callback: ƒ (){
// console.log('name:',this)
// }
// name: {name: "Dot"}
函数执行用call
更改函数this指向,同时立即执行,没有返回值
var obj = {
name: 'Dot'
}
function printName() {
console.log(this.name)
}
printName.call(obj)
// 打印结果
// Dot
函数执行用bind
更改函数this指向,但是函数不会立即执行,而是返回一个更改this指向后的函数
var obj = {
name: 'Dot'
}
function printName() {
console.log(this.name)
}
var res = printName.bind(obj)
console.log(res)
// 打印结果
// ƒ printName() {
// console.log(this.name)
// }
res()
//打印结果
// Dot