当前位置: 首页 > news >正文

改变this指针的三个方法?

要改变 `this` 的指向,JavaScript 提供了一系列的方法:

  1. call():

    • 使用 `call()` 可以直接改变 `this` 的指向。
    • 它接受两个参数:第一个是要调用的目标函数,第二个是将作为 `this` 的值的对象或对象引用的数组。
    • 例如,使用 `call()` 和 `Person` 作为 `this` 的对象,可以这样调用 `fn()`:`fn.call(Person, "hh", 20)`。
  2. apply():

    • `apply()` 与 `call()` 非常相似,但它接收的是一个包含要调用函数及其参数的二维数组。
    • 例如,`fn.apply(Person, ["hh", 20])` 会将 `Person` 作为 `this`,并将其与 "hh" 和 20 结合在一起作为参数调用 `fn()`。
  3. bind():

    • `bind()` 允许开发者创建一个新的函数,并将 `this` 的指向固定到指定的对象上。
    • 这个新的函数可以通过 `.bind()` 构造函数或者 `.apply()` 和 `.call()` 来调用。
    • 如果不需要指定 `this` 的对象,可以使用 `.bind()` 直接返回一个新的函数,之后需要使用 `.apply()` 或 `.call()` 来调用这个新函数。
    • 例如,`fn.bind(Person)('hh', 20)` 会创建一个新函数,其 `this` 为 `Person`,并将其与 "hh" 和 20 结合在一起作为参数调用 `fn()`。

以上方法的示例展示了如何通过不同的参数组合来改变 `this` 的指向。在实际编程中,根据需求选择合适的方法是非常重要的

相关文章:

  • 如何在 Ubuntu 中安装 Microsoft Edge 浏览器
  • 【Spring连载】使用Spring Data访问Redis(五)----Redis Cache
  • 一篇文带你使用js实现拖拽排序
  • go-zero 统一返回
  • 使用Process.Start()打开文件夹时出现访问被拒绝异常
  • go grpc高级用法
  • 输出日志信息的两种方式比较:日志框架SLF4J和System.out.println
  • 【flutter项目类型】project type如何区分
  • Python基础(二十九、pymsql)
  • 如何快速搭建个人博客
  • c++线程thread示例
  • qt5-入门
  • UE4 CustomDepthMobile流程小记
  • 业务逐字稿
  • 在探最大模定理
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【翻译】babel对TC39装饰器草案的实现
  • C++入门教程(10):for 语句
  • HTTP 简介
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Median of Two Sorted Arrays
  • opencv python Meanshift 和 Camshift
  • scrapy学习之路4(itemloder的使用)
  • SegmentFault 2015 Top Rank
  • SpringBoot 实战 (三) | 配置文件详解
  • 不上全站https的网站你们就等着被恶心死吧
  • 基于webpack 的 vue 多页架构
  • 前端路由实现-history
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微服务核心架构梳理
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 小李飞刀:SQL题目刷起来!
  • C# - 为值类型重定义相等性
  • PostgreSQL之连接数修改
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 大数据全解:定义、价值及挑战
  • 进程与线程(三)——进程/线程间通信
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Java并发新构件之Exchanger
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (PADS学习)第二章:原理图绘制 第一部分
  • (pojstep1.1.2)2654(直叙式模拟)
  • (纯JS)图片裁剪
  • (回溯) LeetCode 46. 全排列
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (四) Graphivz 颜色选择
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)