首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

vue:$this=this为什么要在内部函数中使用outter 'this‘?

在Vue中,$this=this的作用是将外部的this赋值给一个变量$this,以便在内部函数中可以访问到外部的this对象。

在JavaScript中,函数内部有自己的作用域,this指向的是当前函数的执行上下文。而在Vue中,经常会使用箭头函数来定义内部函数,箭头函数没有自己的this,它会继承外部函数的this。但是在某些情况下,我们需要在内部函数中访问到Vue实例的this对象,这时就需要使用$this=this来保存外部的this。

具体来说,当我们在Vue的生命周期钩子函数、自定义方法、计算属性等地方使用箭头函数时,由于箭头函数没有自己的this,如果直接使用this,它会指向全局对象(如window),而不是Vue实例。为了确保在内部函数中能够正确地访问到Vue实例的this,我们需要在外部函数中使用$this=this来保存Vue实例的this,然后在内部函数中使用$this来访问Vue实例的属性和方法。

使用外部的$this来代替内部的this,可以避免this指向错误的问题,确保在Vue组件中能够正确地访问到Vue实例的属性和方法。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,满足各种业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL版(CDB):提供高性能、可扩展的关系型数据库服务。详情请参考:https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):提供高度可扩展的容器化应用管理平台。详情请参考:https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React Vue 项目时为什么要在列表组件写 key,其作用是什么?

vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。...在交叉对比,当新节点跟旧节点头尾交叉对比没有结果时,会根据新节点的key去对比旧节点数组的key,从而找到相应旧节点(这里对应的是一个key => index 的map映射)。...vue部分源码如下: // vue项目 src/core/vdom/patch.js -488行 // 以下是为了阅读性进行格式化后的代码 // oldCh 是一个旧虚拟节点数组 if (isUndef...div>5', // id: E '6', // id: F '7' // id: G ] 从以上来看,不带有key,并且使用简单的模板...更准确 因为带key就不是就地复用了,在sameNode函数 a.key === b.key对比可以避免就地复用的情况。所以会更加准确。 2.

1.1K20

Vue data 为什么必须是一个函数

为什么 Vue 的 data 必须是个函数? 官方文档的解释如下: ? ? 为什么会出现上述“影响到其它所有实例”的情况呢?...其实这个问题取决于 JS 原型链知识,而非 Vue 我们先来看不是函数的情况: function Component() { } Component.prototype.data = { name...= new Component() componentA.data.age = 40 console.log(componentA, componentB) // 40 14 这就很好的解释了为什么...Vue 组件的 data 需要用函数了,当 data 是函数的时候,每一个实例的 data 属性都是独立的,互不影响 总结 Vue 的 data 必须是个函数,因为当 data 是函数时,组件实例化的时候这个函数将会被调用...,返回一个对象,计算机会给这个对象分配一个内存地址,实例化几次就分配几个内存地址,他们的地址都不一样,所以每个组件的数据不会相互干扰,改变其中一个组件的状态,其它组件不变 简单来说,就是为了保证组件的独立性和可复用性

1.2K20

为什么defineProps宏函数不需要从vueimport导入?

前言 我们每天写vue代码时都在用defineProps,但是你有没有思考过下面这些问题。为什么defineProps不需要import导入?为什么不能在非setup顶层使用defineProps?...我们将断点走到genRuntimeProps函数内部,在我们这个场景genRuntimeProps主要执行的代码如下: function genRuntimeProps(ctx) { let propsDecls...为什么不能在非setup顶层使用defineProps? 同样的套路我们来debug看看if-child.vue文件,先来回忆一下if-child.vue文件的代码。...为什么不能在非setup顶层使用defineProps?...然后将截取到的props定义的字符串拼接到vue组件对象的字符串,这样vue组件对象中就有了一个props属性,这个props属性在template模版可以直接使用

11310

【java】浅谈java内部

内部类的使用方式实际上总共包括:成员内部类, 方法局部类,匿名内部类,下面,我就给大家来一一介绍: 为什么使用内部类 有的时候你可能有这样一种需求:对一个类(假设它为MyClass.java)创建一个和它相关的类...不能完全自由的访问MyClass的私有数据(必须经过访问器方法) 3. 新增了一个java文件 使用内部类,将Part类的定义写入MyClass内部 1...., 局部类所使用的外部类方法的形参必须用final修饰,否则会编译不通过,也就是说传入后不许改变 为什么这个方法形参一定要用final修饰?  ...且听我慢慢道来: 首先要说一下: 1.内部类和外部类在编译之后形式上是一样的,不会有内外之分 2.局部内部类对于使用的外部方法的值会用构造函数做一个拷贝(编译后) 例如对于下面outterPrint方法的...那么为什么还有个Other的类名呢?”

968101

框架篇-Vue面试题1-为什么 vue 组件的 data 是函数而不是对象

vue组件data的属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}的简写 return...default { data: { // data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象的函数...,因为组件可能被用来创建多个实例 也就是说,在很多页面,定义的组件可以复用在多个页面 如果data是一个纯碎的对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例修改data,都会影响到所有的组件实例...如果data是函数,每次创建一个新实例后,调用data函数,从而返回初始数据的一个全新副本数据对象 这样每复用一次组件,会返回一份新的data数据,类似于给每个组件实例创建一个私有的数据空间,让各个组件的实例各自独立...,互不影响,保持低耦合 可以看下面一段代码 // 声明构造器函数 function Person() {} Person.prototype.data = { // 原型下挂载一对象,并有name

1.9K20

JAVA 第二天 内部

("函数的b="+b); } } } package com.company; /** * 同一个包下面,普通类创建对象市可以直接调用 * 但是内部类就需要使用import...外部类a方法 内部类b方法,调用外部类的变量a=1 内部类调用外部类的a方法: 外部类a方法 外部类的b=1 内部的b=2 函数的b=3 Process finished with exit...在java的事件处理的匿名适配器,匿名内部类被大量的使用。...,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。...将匿名内部类改造成有名字的局部内部类,这样它就可以拥有构造函数了。  在这个匿名内部类中使用初始化代码块。  为什么需要内部类?  java内部类有什么好处?为什么需要内部类?

719110

vue核心面试题:组件的data为什么是一个函数

一、总结 1.vue组件是用来复用的,为了防止data复用,将其定义为函数。...2.vue组件的data数据都应该是相互隔离,互不影响的,组件每复用一次,data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其他复用地方组件的data数据不受影响,就需要通过...,创建子类之后会把自己的选项和父类的选项使用mergeOptions方法做一个合并,自己的选项就包含data。...补充: 为什么要合并?因为子组件也要有父组件的属性,extend方法是通过一个对象创建了一个构造函数,但是这个构造函数并没有父类的属性,因为它是一个新函数,和之前的Vue构造函数是没有关系的。...通过extend产生了一个子函数,这个子函数需要拥有vue实例上的所以东西,它就要做一次合并。 四、为什么new Vue这个里面的data可以放一个对象? 因为这个类创建的实例不会被复用。

48510

Postgresql快照堆栈ActiveSnapshot

2 实验 为什么需要快照堆栈? 因为在事务,有些行为是需要看到最新数据的,比如一个RR事务拿到一个快照后执行了一段时间,这时运行了一条CALL Func或触发器语句,开始进入函数的执行逻辑。...=# call p_outter(); NOTICE: count: {1,2} NOTICE: count: {1,2,10,20} 那么如果在函数p_outter执行pg_sleep期间内,在另一个会话插入一条数据后会发生什么...(); NOTICE: count: {1,2} NOTICE: count: {1,2,999,10,20} 从结果可以看到,单条SQL call p_otter()每次Call函数都会重新拿快照的...编码的时候需要注意快照几个接口函数使用: 3.1 接口函数内部变量 堆栈相关: PushActiveSnapshot 新建ActiveSnapshotElt,ActiveSnapshot全局变量永远指向栈顶...几个内部变量: CurrentSnapshot:表示当前连接正在使用的活动事务快照。 SecondarySnapshot:永远指向一个最新的快照。

1K60

Java内部类详解

代码需要给按钮设置监听器对象,使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,但是前提是这个父类或者接口必须先存在才能这样使用。...二.深入理解内部类   1.为什么成员内部类可以无条件访问外部类的成员?   在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?...2.为什么局部内部类和匿名内部类只能访问局部final变量?   ...这样一来,匿名内部使用的变量是另一个局部变量,只不过值和方法中局部变量的值相等,因此和方法的局部变量完全独立开。   ...三.内部类的使用场景和好处   为什么在Java需要内部类?

42910

Python入门之函数的装饰器

主要用于抽离大量函数函数本身无关的雷同代码并继续重用。   装饰器又可分为带参数和不带参数。   ...,传递参数, # 外部函数带的参数,就是准备给内部函数里用的,这里是闭包功能 def wrapper(): start_time =...(index) #初始index函数经过处理已经被变更为outter(index),被''装饰''了 index() # 该方法能显示运行时长, 是把最初始的index函数通过闭包的特点,经过处理后重新把新的函数内存地址...上面写的无参装饰器唯一的参数就是执行对应的业务函数。装饰器的语法允许我们在调用的时候,提供其他参数。新增的参数为装饰器的编写和使用提供了更大的灵活性。 ?...它实际上是对原有装饰器的 一个函数封装,并返回一个装饰器。我们可以将它理解为一个含有参数的闭包。 当我们调用的时候,Python能够发现这一层封装,并把参数传递到装饰器的环境

81270

Vue篇(012)-在compositionAPI如何使用生命周期函数

参考答案: 需要用到哪个生命周期函数,就将对应函数的import进来,接着在setup调用即可 解析: 1.由于setup是随着beforeCreate和created这两个生命周期钩子运行的,因此在你无需显式地定义它们...2.其他的生命周期函数在setup中使用的时候只需要在前面加上一个‘on’即可,如mounted的生命周期函数在setup写为onMounted 3.所有在setup中使用的生命周期函数都需要import...引入,如:import {onMounted} from 'vue' 4.setup中生命周期函数的写法是在调用的生命周期函数写上一个回调函数,如onMounted函数的写法: export default...}) } } 下面这个表格描述了setup内部的钩子 选项 APIsetup内部的钩子beforeCreate不需要created不需要beforeMountonBeforeMountmountedonMountedbeforeUpdateonBeforeUpdateupdatedonUpdatedbeforeUnmountonBeforeUnmountunmountedonUnmountederrorCapturedonErrorCapturedrenderTrackedonRenderTrackedrenderTriggeredonRenderTriggered

1.3K10

【14】JAVASE-面向对象-内部类【从零开始学JAVA】

而Inner相对于Outter来说就是内部类 Java不能被实例化的类型有哪些?...抽象类 接口 所有的构造方法都被private修饰的类型 内部类不能被外界直接实例化 为什么使用内部类? 提高类的安全性 2....out = new Outter02(); out.show(); } } class Outter02{ int num1 = 20; /** * 在JDK1.8之后 把局部内部类中使用的外部方法的局部变量默认的提升为...静态内部类的特点: 本身还是一个class,所以内部成员和普通类没区别 静态内部类不能获取外部类的非静态的属性和方法 在外部内中要获取内部类对象直接实例化即可 如果要获取静态内部的静态方法或者属性的话可以通过如下方式获取...如果一个内部类在整个操作使用了一次的话,那就可以定义为匿名内部类。

4700

从反编译深入理解JAVA内部类类结构以及final关键字

参考链接: Java本地内部类 1.为什么成员内部类可以无条件访问外部类的成员?     在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?...,编译器还是会默认添加一个参数,该参数的类型为指向外部类对象的一个引用,所以成员内部Outter this&0 指针便指向了外部类对象,因此可以在成员内部随意访问外部类的成员。...2.为什么局部内部类和匿名内部类只能访问局部final变量?       ...默认情况下,编译器会为匿名内部类和局部内部类起名为Outterx.class(x为正整数)。       根据上图可知,test方法的匿名内部类的名字被起为 Test$1。       ...这样一来,匿名内部使用的变量是另一个局部变量,只不过值和方法中局部变量的值相等,因此和方法的局部变量完全独立开。

51400

函数(三)

闭包函数 定义:函数内部函数对外部作用域而非全局作用域的引用 两张函数参数的方式 使用参数 def func(x) print(x) func(1) func(1) 1 1 包给参数 def...outter(x) def inner() print(x) return inner f = outter(1) f() 1 闭包的意义:返回的函数对象,不仅仅是一个函数对象...,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。...注意:1,装饰器本身其实是可以任意可调用的对象 ​ 2,被装饰的对象可以是任意可调用的对象 为什么需要装饰器 ​ 如果我们已经上线了一个项目,我们需要修改某一个方法,但是我们不想修改方法的使用方法,这个时候可以使用装饰器...,但是不改变函数内部的语法,不改变函数调用方式

29420
领券