- call() 改变指向,也可以用着继承
let obj1 = {
name: 'andy'
}
function fn1(a, b) {
console.log(this);
console.log(a + b);
}
//第一个参数为改变指向,后面的参数(多个)都为实参,传给调用者
fn1.call(obj1, 1, 2);
- apply() 改变指向,也可以用于借用Math对象
let obj2 = {
name: 'andy'
}
function fn2(a, b) {
console.log(this);
console.log(a + b);
}
//第一个参数为指向,后面的参数以数组的方式传给调用者
fn2.apply(obj2, [1, 2]);
//apply 主要应用 比如说我们可以利用apply借助于数学内置对象
let arr = [1, 5, 8, 6, 4, 2, 7];
console.log(Math.max.apply(Math, arr));
- bind() 改变指向,不调用函数
let obj3 = {
name: 'andy'
}
function fn3(a, b) {
console.log(this);
console.log(a + b);
}
//不会调用 改变原函数的指向,返回新函数(拷贝)
let f = fn3.bind(obj3, 1, 2);
f();
三者的区别:
共同点:
1.第一个参数都是改变this指向。
2.call()和bind()是一样的传参方式。
3.2.call()和bind()立即调用函数。
不同点:
1.apply()传参是使用数组方式来传入实参。
2.bind()他不会立即调用函数。
以上仅为参考,写的不好请多多见谅!