Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • CSS

  • JavaScript

    • 兼容ie7的水平无限滚动
    • 节流防抖
    • 数组乱序
    • 开启全屏
    • 数据类型
    • 变量提升
    • this调用指向
    • 原型及原型扩展
    • js获取元素属性精度问题
    • setTimeout和setInterval
    • 数组判断
    • dom节点添加或插入元素
    • var、let和const的区别
    • 判断ellipsis是否省略生效
    • 使用ResizeObserver监听元素size变化
    • js自定义事件
    • use strict详解
    • 私有属性
    • js实现类的方式
    • call和apply的理解和使用
    • js失焦和点击事件顺序冲突
    • js中不常见但非常实用的运算符
    • for of和for in的区别
    • defer和async的区别
    • promise值穿透
    • js为什么会出现数字精确度丢失
    • js禁用F12开发者模式
    • 使用scrollTop和scrollTo滚动到目标位置
    • js实现打字机效果
    • 多种方式实现数组去重
    • 替换使用setTimeout
    • encodeURI和encodeURIComponent的区别
    • canvas实现弹跳小球
    • js实现跨标签页通信
    • 事件循环与微任务、宏任务
    • 浏览器存储数据方式
    • 常见的meta元数据使用
    • 使用InterSectionObserver判断元素区域(chatGPT)
  • 工具

  • Vue

  • antdv踩坑记录

  • Vue3

  • 前端
  • JavaScript
kros
2023-03-21

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

使用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

在上面的例子中,我们定义了一个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

提示

在浏览器环境this为window,node环境为global

上次更新: 2025/09/05, 8:09:00
js实现类的方式
js失焦和点击事件顺序冲突

← js实现类的方式 js失焦和点击事件顺序冲突→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev