在javascript语言中改变this指向的方法有三种分别是bind,call,apply,那么它们的共同点,不同点以及各自的用法都是什么呢?
目录
bind,call,apply的共同点
bind,call,apply的不同点
总结
bind,call,apply的共同点
都能改变this的指向。
都能够进行传参。
bind,call,apply的不同点
bind会返回一个新的函数,新函数的this指向以及参数都是跟bind对应。
function printName(a){
console.log(this.name + 'a')
}
var obj = {
name:'aa'
}
var newFunction = prinfName.bind(obj,'a')
newFunction () // 输出'aaa'
2.call的功能基本与bind一致,但call会在执行后立即调用改变了this指向的函数。
function printName(a){
console.log(this.name + 'a')
}
var obj = {
name:'aa'
}
// 此时newFunction 将不是一个函数,而是prinfName.bind(obj,a)函数执行后的返回值
// 因为printName函数没有返回任何东西所以newFunction等于undefined
var newFunction = prinfName.bind(obj,'a') // 输出'aaa'
3.apply跟call一致也会在执行后调用改变this指向的方法,但apply的传参是一个数组
function printName(a){
console.log(this.name + 'a')
}
var obj = {
name:'aa'
}
// 此时newFunction 将不是一个函数,而是prinfName.apply(obj,['a'])函数执行后的返回值
// 因为printName函数没有返回任何东西所以newFunction等于undefined
var newFunction = prinfName.apply(obj,['a']) // 输出'aaa'
总结
这三个方法的功能都是可以改变this指向,区别是bind改变this指向后不会立即执行那个函数,call和apply则会立即执行,而apply的传参是用数组,以上就是bind,call,apply的区别和用法。