📅  最后修改于: 2023-12-03 14:57:24.908000             🧑  作者: Mango
在 JavaScript 中,我们经常使用 call() 和 apply() 方法来调用一个函数并绑定 this 指向。这两个方法的作用有些相似,但是用法有一些不同。
call() 方法用于调用一个函数,并将一个对象指定为该函数的 this 对象。
fun.call(thisArg, arg1, arg2, ...)
参数解释:
function greet() {
console.log(`Hello, ${this.name}!`);
}
const person = { name: 'Tom' };
greet.call(person); // 输出:Hello, Tom!
在上面的示例中,我们定义了一个函数 greet()
,它需要访问一个名为 name
的属性。我们通过调用 call()
方法并将一个对象 person
作为参数传递给它,将 this
指向了 person
对象,这样就可以取得 person
对象的 name
属性。
apply() 方法也用于调用一个函数,并将一个对象指定为该函数的 this 对象。与 call() 方法不同的是,它需要将函数的参数作为数组传递。
fun.apply(thisArg, [argsArray])
参数解释:
function greeting(msg) {
console.log(`${msg}, ${this.name}!`);
}
const person = { name: 'Tom' };
greeting.apply(person, ['Hello']); // 输出:Hello, Tom!
在上面的示例中,我们定义了一个函数 greeting()
,它接收一个参数 msg
。我们通过调用 apply()
方法并将一个对象 person
和一个字符串数组 ['Hello']
作为参数传递给它,将 this
指向了 person
对象,并将 ['Hello']
作为参数传递给了函数 greeting()
。
call() 和 apply() 方法非常相似,但区别在于传递参数的方式。
call() 方法可以将参数作为一个个单独的参数传递,而 apply() 方法需要将参数作为数组传递。
当参数数量不确定时,可以使用 apply() 方法,利用数组的特点,方便地将多个参数传递给函数。