js中call、apply、bind的区别
call
call 函数上的公共方法,主要是用来改变this
- call的第一个参数,改变call前面函数中的this
- 让call前面的函数执行
- call方法中第二个及第二个以后的参数作为实参传给call前面的这个函数
function a(){
console.log(this) // A
console.log(arguments) // [1,2,3] 这里说明下arguments是一个类数组,他有length有索引,但是不能使用数组的方法
}
a.call('A',1,2,3)
function a(){
this.A=1
}
function b(){
a.call(this)
}
let c = new b()
console.log(c.A) // 1
我们可以使用call改变父类的this,实现函数b继承函数a的私有属性
apply
apply和call方法使用一样。唯一不同的是,第二个参数传入的是一个数组,让apply前面的这个函数执行的时候是依次传入进去
function a(q,w,e){
console.log(this) // A
console.log(q,w,e) // 1 2 3
}
let arr =[1,2,3]
a.apply('A',arr)
bind
bind和call一样。唯一不同的是bind不会执行函数,且会返回一个改变this后的新的函数。我们可以利用这个特性克隆函数
function a(){
this.name='AAA'
}
let c = a.bind(null)
console.log(c) // ƒ a