2019独角兽企业重金招聘Python工程师标准>>>

要理解Vue实例里this的使用,首先要理解this在JavaScript里的用法,可以参考理解JavaScript普通函数以及箭头函数里使用的this。

这是vue文档里的原话:

All lifecycle hooks are called with their 'this' context pointing to the Vue instance invoking it.

意思是:在Vue所有的生命周期钩子方法(如created,mounted, updated以及destroyed)里使用this,this指向调用它的Vue实例。

示例分析

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title></title><script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script><script src="https://unpkg.com/vue@2.5.9/dist/vue.js"></script>
</head>
<div id="app" style="width: 100%;height: auto;font-size:20px;"><p id="id1"></p><p id="id2"></p>
</div>
<script type="text/javascript">var message = "Hello!";var app = new Vue({el:"#app",data:{message: "你好!"},created: function() {this.showMessage1();    //this 1this.showMessage2();   //this 2},methods:{showMessage1:function(){setTimeout(function() {document.getElementById("id1").innerText = this.message;  //this 3}, 10)},showMessage2:function() {setTimeout(() => {document.getElementById("id2").innerText = this.message;  //this 4}, 10)}}});
</script>
</html>

示例定义了两个message。一个是全局变量,即window.message,它的值为英文“Hello!”。另外一个是vue实例的数据message,它的值为中文的“你好!”。

运行示例,在浏览器得到:

第一个输出英文"Hello!”,第二个输出中文“你好!”。这说明了showMessage1()里的this指的是window,而showMessage2()里的this指的是vue实例。

created

created: function() {this.showMessage1();    //this 1this.showMessage2();   //this 2
}

created函数为vue实例的钩子方法,它里面使用的this指的是vue实例。

showMessage1()

showMessage1:function(){setTimeout(function() {document.getElementById("id1").innerText = this.message;  //this 3}, 10)
}

对于普通函数(包括匿名函数),this指的是直接的调用者,在非严格模式下,如果没有直接调用者,this指的是window。showMessage1()里setTimeout使用了匿名函数,this指向window。

showMessage2()

showMessage2:function() {setTimeout(() => {document.getElementById("id2").innerText = this.message;  //this 4}, 10)
}

箭头函数是没有自己的this,在它内部使用的this是由它定义的宿主对象决定。showMessage2()里定义的箭头函数宿主对象为vue实例,所以它里面使用的this指向vue实例。

绑定vue实例到this的方法

为了避免this指向出现歧义,有两种方法绑定this。

使用bind

showMessage1()可以改为:

showMessage1:function(){setTimeout(function() {document.getElementById("id1").innerText = this.message;  //this 3}.bind(this), 10)
}

对setTimeout()里的匿名函数使用bind()绑定到vue实例的this。这样在匿名函数内的this也为vue实例。

把vue实例的this赋值给另一个变量再使用

showMessage1()也可以改为

showMessage1:function(){var self = this;setTimeout(function() {document.getElementById("id1").innerText = self.message;  //改为self}.bind(this), 10)
}

这里吧表示vue实例的this赋值给变量self。在使用到this的地方改用self引用。

转载于:https://my.oschina.net/jack088/blog/2251579

Vue实例里this的使用相关推荐

  1. 创建第一个vue实例

    一.vue安装与下载 1. 官网下载  下载地址 选择开发版本 2. 打开sublime,新建vue文件夹,将下载好的代码vue.js放入vue文件夹中. 3. 新建index.html文件,在hea ...

  2. Vue学习笔记:创建一个Vue实例

    目录 1.访问Vue官网https://cn.vuejs.org,进入学习模块下的教程 2.创建页面index.html 3.通过script标签在head部分引入vue.js 4.在body部分创建 ...

  3. Vue实例 和 Vue实例周期生命函数

    一.Vue实例  Vue中的每一个组件其实也是一个Vue实例.新建组件item, 模板内容为div块; 现在就可以在根实例里使用这个组件了,使用方法就是通过标签的形式写在根实例里. 实际上在创建组件的 ...

  4. vue中js文件里获取this(vue实例)

    vue中js文件里获取this(vue实例) 1,在main.js中抛出vue实例,在需要用到的地方引入即可 main.js里let vueThis= new Vue({el: '#app',rout ...

  5. vue邪道玩法 : 把vue实例存在别的地方,以及可能会遇到的问题

    一般来说,VUE项目中,this指向VUE实例. 但有的时候,某些代码会改变this的指向. 这时,可以用一个临时变量存储VUE实例. test1(){ var _this = this // 把vu ...

  6. vue实战记录(二)- vue实现购物车功能之创建vue实例

    vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(二) GitHub:sue ...

  7. vue生命周期图示中英文版Vue实例生命周期钩子

    vue生命周期图示中英文版Vue实例生命周期钩子 知乎上近日有人发起了一个 "react 是不是比 vue 牛皮,为什么?" 的问题,Vue.js 作者尤雨溪12月4日正面回应了该 ...

  8. vue 生命周期_深入理解Vue实例生命周期

    ‍vue实例生命周期与生命周期钩子‍ 每个 Vue 实 例在被创建时都会经过一系列的初始化过程.例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. 为了让开发者在 ...

  9. Vue基础之Vue实例

    构造器: 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: 在实例化 Vue 时,需要传入一个选项对象,它可以包含数据.模板.挂载元素.方法.生命周期钩子等选项. ...

最新文章

  1. props写法_简单理解vue中Props属性
  2. 一文读懂MySQL事务锁、事务级别
  3. MTK Android 编译命令
  4. 联合国粮农组织总干事屈冬玉 对话国际农民丰收节贸易会
  5. 基于Linux C的socketEthereal程序和Package分析 (一个)
  6. 服务器LIMIT是什么信号,Postfix添加milter-limit配置方案
  7. SecureCRT向多个tab窗口发命令
  8. 100家店干翻17000家药店!刘强东最恐惧的对手来了!
  9. 数据库——SQL-SERVER练习(4) 建表及数据完整性
  10. (day 42 - 字符翻转 ) 剑指 Offer 58 - II. 左旋转字符串
  11. matlab保存每次循环的结果
  12. Android 四大组件学习之Activity二
  13. 数据接口复习 3 stack and queue
  14. java 3dm_3dm游戏运行库合集安装包-游戏运行库合集安装包下载v3.0DM整理-西西软件下载...
  15. 显示 think-cell 用户界面时出现错误
  16. linux sd卡修复工具,免费的SD卡数据恢复工具介绍
  17. 虚假共识—阿比勒尼悖论:“枪打出头鸟”与“事后诸葛亮”
  18. js的alert弹框中怎么写html,JavaScript实现alert弹框效果
  19. Unity官方录屏插件Unity Recorder的简单使用
  20. 算法高级(15)-LVS的负载均衡策略及LVS+KeepAlived+Nginx实现高可用方案

热门文章

  1. java的23设计模式
  2. Java内部类作用全解
  3. labview将产生数据存入数组 并保存成Excel
  4. java提供密码加密的实现
  5. 计算机上能玩vr游戏吗,VR设备是什么? 听说可以用来玩电脑游戏的?
  6. Hadoop详解(十):Hadoop 作业调度机制
  7. [RDMA] RDMA 初步使用操作
  8. python程序员年薪百万_想要成为年薪百万的Python程序员,这套面试题别错过
  9. Redis集群架构搭建详解
  10. DK云网关与普通DTU之间的区别