call和apply的理解和使用
在JavaScript中,call和apply是用于调用函数的方法,它们允许你在指定的上下文中调用函数,并且可以传递参数。
call和apply的作用相同,唯一的区别在于参数的传递方式。
使用call方法:
function demo(age) {
console.log('I\'m ' +( this.name || '--'), ', I\'m ' + age + ' years old')
}
let user = { name: '张三' }
demo('123') // I'm -- , I'm 123 years old
// 修改this指向并传参
demo.call(user, 12) // I'm 张三 , I'm 12 years old
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
使用apply方法:
function demo(age) {
console.log('I\'m ' +( this.name || '--'), ', I\'m ' + age + ' years old')
}
let user = { name: '张三' }
demo('123') // I'm -- , I'm 123 years old
// 修改this指向并传参
demo.apply(user, [12]) // I'm 张三 , I'm 12 years old
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在上面的例子中,我们定义了一个demo函数,它接受一个参数age并输出问候语。然后,我们使用call和apply方法来调用这个函数。
call和apply的第一个参数是要在函数中使用的上下文对象。在上面的例子中,我们传递了user作为上下文对象,表示以user作为上下文来调用函数。如果你想使用全局上下文该值设为null即可
call和apply的第二个参数及之后的参数是要传递给函数的参数。对于call方法,参数是直接按顺序传递的;而对于apply方法,参数以数组的形式传递。
使用call和apply方法可以方便地指定函数的上下文并传递参数,这对于实现继承、借用方法等场景非常有用。
除了传递指定的对象外,call/apply第一个参数也可以为null和undefined,当传null和undefined时当前的执行环境为全局环境也就是说this等于window
function demo() {
console.log(this)
}
demo.call(this) // 输入 window
1
2
3
4
2
3
4
提示
在浏览器环境this为window,node环境为global
上次更新: 2025/09/05, 8:09:00