<!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 1
this.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>
第一个输出英文"Hello!”,第二个输出中文“你好!”。这说明了showMessage1()里的this指的是window,而showMessage2()里的this指的是vue实例。
※  对于普通函数(包括匿名函数),this指的是直接的调用者,在非严格模式下,如果没有直接调用者,this指的是window。showMessage1()里setTimeout使用了匿名函数,this指向
window。
※ 箭头函数是没有自己的this,在它内部使用的this是由它定义的宿主对象决定。showMessage2()里定义的箭头函数宿主对象为vue实例,所以它里面使用的this指向vue实例。
注:
【普通函数的this】
普通函数的this是由动态作用域决定,它总指向于它的直接调用者。具体可以分为以下四项:
this总是指向它的直接调用者, 例如 obj.func() ,那么func()里的this指的是obj。
在默认情况(非严格模式,未使用 'use strict'),如果函数没有直接调用者,this为window
在严格模式下,如果函数没有直接调者,this为undefined
使用call,apply,bind绑定的,this指的是绑定的对象

 

绑定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
}

  

最新文章

  1. 自动存储管理 ASM (转)
  2. Android开发学习笔记:浅谈WebView(转)
  3. javascript优化--12模式(设计模式)03
  4. 将Excel文件.xls导入SQL Server 2005
  5. java设计模式--行为型模式--命令模式
  6. EasyUI两种动态添加tab Iframe页面的方法
  7. iOS.Animations.by.Tutorials.v2.0汉化(四)
  8. [开源]使用C# 对CPU卡基本操作封装
  9. mysql 重点性能测试指标
  10. asp.net-常用服务器控件-20180329
  11. MyISAM索引和InnoDB索引的区别
  12. [luogu3709][大爷的字符串题]
  13. ffmpeg 视频实现各种特效
  14. Beta冲刺! Day3 - 砍柴
  15. ArrayList详细
  16. Myeclipse打war包方法
  17. Hibernate与Mybatis对比
  18. POJ:3977-Subset(双向搜索)
  19. 多线程中wait、notify理解
  20. Docker 镜像制作 CentOS+JDK+Tomcat

热门文章

  1. [arc076F]Exhausted?[霍尔定理+线段树]
  2. FME Cloud 账号申请流程
  3. PAT-1010 Radix
  4. PTA (Advanced Level) 1002 A+B for Polynomials
  5. Daily Scrumming* 2015.12.11(Day 3)
  6. 20135316Linux内核学习笔记第五周
  7. Leetcode——37.解数独 [##]
  8. 开源通用爬虫框架YayCrawler-运行与调试
  9. ElasticSearch 2 (14) - 深入搜索系列之全文搜索
  10. ELK Stack (1) —— ELK + Redis安装