Vue注意点——this

面向对象语言中 this 表示当前对象的一个引用。

但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。

那么就大致的看看这些this在常用的几个使用环境中代码中的表现吧

在方法中,this 表示该方法所属的对象:

代码实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对于this的测试</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			<button type="button" @click="printThis">打印方法中的this</button>
		</div>
		
		<script>
			new Vue({
				el:'#app',
				methods:{
					printThis(){
						console.log(this)
					}
				}
			})
		</script>
	</body>
</html>

打印结果:

可以看到,在点击按钮打印出的this对象是Vue,也确实是方法所属的对象

如果单独使用:this 表示全局对象。

代码实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对于this的测试</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			
		</div>
		
		<script>
			var a = this
			console.log(a)
		</script>
	</body>
</html>

打印结果:

可以看到,在直接使用的时候,this指向的对象就是windows,也就是全局对象

在函数中:this 表示全局对象。

代码实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对于this的测试</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			
		</div>
		
		<script>
			document.getElementById("app").innerHTML = priontThis();
			function priontThis(){
				return this
			}
		</script>
	</body>
</html>

打印结果:

 可以看到,在我们使用函数返回一个this对象的时候,将返回值打印在页面中显示的是Window,也就是全局对象

在事件中:

代码实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对于this的测试</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			<button type="button" onclick="this.style.display='none'">点我消失</button>
			<!-- <button type="button" v-on:click="this.style.display='none'">点我消失</button> -->
		</div>
		
		<script>
			new Vue({
				el:'#app',
				methods:{
					print(){
						console.log(this)
					}
				}
			})
		</script>
	</body>
</html>

打印结果:

按钮在点击之后就消失了,这是绑定了原生的js事件是oncilck,并不是Vue中的事件,如果你使用v-on:cilck的方式绑定了一个央视,会报错

当方法作为参数传递到自定义指令的时候:

代码实现:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>对于this的测试</title>
		<script src="vue.js"></script>
	</head>
	<body>
		<div id="app">
			<p v-color>你好世界</p>
		</div>
		
		<script>
			new Vue({
				el:'#app',
				directives:{
					color:{
						bind(){
							console.log(this)
						}
					}
				}
			})
		</script>
	</body>
</html>

打印结果:

 可以看到,在自定义指令中,this表示的是全局对象,并不是绑定的DOM对象,所以此时就需要一个参数el作为接收操作DOM对象的变量来调用方法

注意点:

当我们需要调用this,但是又不知道此时的this到底代表着什么,最简单的办法就是把this打印在控制台输出一下看其中包含的内容就知道具体代表的是什么了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值