首页 > 其他分享 >什么场景下值得使用 const that = this ?

什么场景下值得使用 const that = this ?

时间:2023-05-14 09:33:34浏览次数:33  
标签:值得 场景 const 函数 指向 Vue 实例 模板

在 Vue2 项目中,我们经常会遇到这样一个问题:什么场景下值得用const that = this?这个问题涉及到 JavaScript 中的 this 指针和 Vue 中的模板语法。本文将从以下三个方面来论述这个问题:

  • this 指针的含义和变化
  • Vue 模板语法中如何使用 this
  • const that = this的作用和优劣

首先,我们要明白 this 指针的含义和变化。在 JavaScript 中,this 用以指代当前对象,但是 this 却不是固定不变的。它的指向取决于函数的调用方式和上下文环境。例如:

  • 在一个普通函数中,this 指向全局对象(window 或 global)。
  • 在一个对象的方法中,this 指向该对象。
  • 在一个箭头函数中,this 指向定义时所在的对象。
  • 在一个事件处理函数中,this 指向触发事件的元素。
  • 在一个构造函数中,this 指向新创建的实例等等。

因此,在不同的场景下,我们需要注意 this 的变化,否则可能会导致意想不到的结果。

其次,我们要了解 Vue 模板语法中如何使用 this 。在 Vue 中,我们可以使用模板语法来绑定数据和事件,例如{{ message }}@click="handleClick"。这些模板语法会被编译成 JavaScript 代码,并在 Vue 实例的作用域下执行。因此,在模板语法中,this 指向 Vue 实例本身,可以访问到实例的 data、props、methods、computed 等属性和方法。但是,在模板语法中不能直接使用外部定义的常量或变量,例如const CREATE_ACTION = 1。如果我们想要使用这些常量或变量,我们需要将它们暴露在 data、methods 或 computed 中。

最后,我们要探讨const that = this的作用和优劣。这个语句的目的是为了保存当前的 this 指针,以便在其他函数或回调函数中使用。例如,在axios.get().then()中,then 的回调函数中的 this 指向 axios 的回调函数本身,而不是 Vue 实例。如果我们想要在回调函数中访问 Vue 实例的属性或方法,我们就需要在 then 之前将 this 赋值给一个变量 that ,然后在回调函数中使用 that 。这样做可以避免 this 指针的混乱和错误。但是,这个方法也有一些缺点:

  • 增加了代码量和复杂度;
  • 可能造成内存泄漏;
  • 不利于 TypeScript 的类型检查。

综上所述,什么场景下值得用const that = this?我的观点是:当我们需要在其他函数或回调函数中访问 Vue 实例的属性或方法时,可以使用 const that = this 来保存当前的 this 指针

但是,这个方法也有一些缺点,所以我们应该尽量避免使用它,并寻找其他更好的解决方案。例如:

  • 使用箭头函数来绑定 this ;
  • 使用 mixins 或 plugins 来共享常量或变量;
  • 使用 computed 属性来处理复杂的逻辑等等。

标签:值得,场景,const,函数,指向,Vue,实例,模板
From: https://www.cnblogs.com/mxyulin/p/17398765.html

相关文章

  • 让gpt写代码:面向三个场景:读多写少,读写一样多,读少写多
    Craftedby[Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)You结合golang,分别根据读多写少,读少写多,读写一样多三个场景设计对应的数据结构,并给出压力测试方案Genie数据结构设计场景一:读多写少在读多写少的场景下,我们可以选择使用......
  • 联邦学习:联邦场景下的领域泛化
    1导引1.1域泛化域泛化(domaingeneralization,DG)[1][2]旨在从多个源域中学习一个能够泛化到未知目标域的模型。形式化地说,给定\(K\)个训练的源域数据集\(\mathcal{S}=\left\{\mathcal{S}^k\midk=1,\cdots,K\right\}\),其中第\(k\)个域的数据被表示为\(\mathcal{S}^k=\le......
  • 题解 ABC239F【Construct Highway】
    翻译:给定\(n,m\)和度数数组\(\{d_i\}\),再给你\(m\)条边,请构造一棵\(n\)点的树包含这\(m\)条边,且第\(i\)个点的度数为\(d_i\),或者判断无解。显然,若\(\sumd_i\ne2(n-1)\),则无解。然后对于输入的每条边,使用并查集维护,再求出在这\(m\)条边的基础上每个点还需要多......
  • No matching constructor found in class 'hello问题的解决
    问题描述在Spring的bean配置里面引入java类的相关路径,但是显示上面这个错误问题解决查找资料发现,这个问题的原因就是我引用的这个实体类里面没有无参构造函数的定义,定义之后,就能够正常使用啦!......
  • IOS技术分享| 快对讲2.0会议场景实现
    前言快对讲2.0,全新升级,新增多人音视频会议模块,让沟通更高效!会议模块包含会控、成员管理、聊天、屏幕共享、音视频相关、AI降噪等实用功能,支持iOS、Android和Web等多终端接入,让远程协作更加轻松自如。iOS快对讲调度场景实现功能体验快对讲官网快对讲移动端下载快对讲调度......
  • Java 9模块化关键字及应用场景
    一、背景SpringBoot3.0最低要求jdk17,为跟上节奏储备知识。二、简介关键字描述应用场景module定义一个模块代码隔离,依赖控制,代码可重用性openmodule定义一个像java9之前的开放模块像Java的旧版本那样允许完全反射exports...to指定模块的一部分对外提供......
  • 工业园区的智慧安监方案:AI视频边缘计算技术的应用场景剖析
    一、方案背景 针对工业园区化工企业多且安全及环保等方面存在风险高、隐患多、精细化管控复杂的情况,需要全面整合并优化园区现有基础设施、系统平台等信息化资源,建立园区的智能化风险预警管理平台,利用信息化手段,增强园区安全状态监测预警、风险防控能力,实现园区辅助决策,为园区安......
  • 2023年有哪些值得尝试的住宅代理提供商
    随着互联网发展,代理服务器成为很多在线任务不可或缺的工具,比如访问受地理限制的内容,克服网站封锁,改善隐私,购买限量版物品或只是更改其IP地址。与此同时,企业利用网络抓取数据聚合,市场研究,SEO监控和许多其他用例。近年市场上代理服务公司层出不穷,某些商家从不道德的IP地址来源很容易......
  • 不同应用场景瑞芯微RK3568主板方案定制
    随着物联网和智能设备的迅猛发展,瑞芯微RK3568主板方案作为一种高性能的系统System-on-a-chip(SoC),已经成为嵌入式系统、智能家居设备和工业自动化设备等应用场景的首选方案。定制瑞芯微RK3568主板方案可以满足不同应用场景的需求,同时也为企业提供了更多的商业机会。▎行业应用万象......
  • C++ 类和对象: const关键字
    1.const关键字在C语言中,const关键字用来修饰变量,表示变量的值不能被修改在C++中,const可以修饰变量,也可以用来修饰对象和类成员变量下面先来看一下,const修饰对象使用const修饰的对象d1,调用成员函数报错,这是为什么?那么只要把this指针类型改为constDate*,......