<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>
分别输出
hello
你好
在我们的showmessage1()中我们用的是常规的非匿名的函数,而我们的showmessage2()则用的是我们的匿名函数。
在我们的showMessage1()中,在非严格模式下,如果没有直接调用者我们的this是指向windows所以输出的是hello
在我们的showMessage2()中箭头函数是没有自己的this,在塔内布使用的this是有它的宿主对象决定的。宿主对象定义为vue实例,所以这里面的this指向的是vue实例。
本文深入探讨了JavaScript中this的用法,特别是在Vue.js上下文中。在`showMessage1()`中,由于使用了非匿名函数,this在非严格模式下默认指向全局对象,导致输出为'hello'。而在`showMessage2()`里,箭头函数不创建自己的this,因此this的值继承自外层作用域,即Vue实例,输出为'你好'。本文揭示了this在不同函数类型中的行为差异及其在前端开发中的重要性。
323

被折叠的 条评论
为什么被折叠?



