call()
和 apply()
是立即调用函数并改变 this
指向,而 bind()
是创建一个新的函数,其中 this
指向被永久绑定。
三者都是可以改变this的指向
call()和apply()传递的参数的形式不同,
call是直接传递参数过去,
apply是以数组的形式来传递参数的。
bind会返回创建一个新的函数,称为绑定函数,该函数中this的指向为bind()中的第一个参数
call()
: 这个方法允许你调用一个函数,同时指定函数体内this
的值,以及传入一个参数列表。
function greet(name) {
console.log(`Hello, ${name}! I am ${this.name}.`);
}
const person = { name: 'Alice' };
greet.call(person, 'Bob');
// 输出: Hello, Bob! I am Alice.
apply()
: 与call()
类似,不同之处在于它接受的参数是以数组的形式传入。
function greet(name, age) {
console.log(`Hello, ${name}! I am ${this.name} and I am ${age} years old.`);
}
const person = { name: 'Alice' };
greet.apply(person, ['Bob', 30]);
// 输出: Hello, Bob! I am Alice and I am 30 years old.
bind()
: 这个方法会创建一个新的函数,称为绑定函数,这个函数的this
值会被永久绑定到传入bind()
方法的值。
function greet(name) {
console.log(`Hello, ${name}! I am ${this.name}.`);
}
const person = { name: 'Alice' };
const greetPerson = greet.bind(person);
greetPerson('Bob');
// 输出: Hello, Bob! I am Alice.
所以,call()
和 apply()
是立即调用函数并改变 this
指向,而 bind()
是创建一个新的函数,其中 this
指向被永久绑定。