在下面的代码中,写了一个简单的例子,如果我们去执行vue的group方法,在forEarch里面,对变量进行push(),发现使用 app. 是可以的,使用 this. 就会报错,而group1方法用es6去定义函数,app. 和 this. 都可以执行,请问这是什么原因? this在vue的函数里面不是一直指向vue实例吗。es6定义的函数没有出现这样的问题。
<!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;">
</div>
<script type="text/javascript">
var app = new Vue({
el:"#app",
data:{
sList: [1,2,3],
sResultList: []
},
methods:{
group:function(){
this.sList.forEach(function(obj){
app.sResultList.push(obj)
// this.sResultList.push(obj)
})
},
group1:function(){
this.sList.forEach((obj)=>{
this.sResultList.push(obj)
// app.sResultList.push(obj)
})
}
},
})
$(function(){
app.group()
})
</script>
</html>
如果你用
for
循环,而不用forEach
的话,这时候使用this
就是可以的,造成这个原因就是forEach
循环体是以一个函数体的形式去循环的,this
总是指向事件的调用者,这点你应该有所了解,知道了这一点,大概就知道是怎么回事了。