vue this 问题

<body>
    <div id="app">
    <button @click="test1">button1</button>
    <button @click="test2">button2</button>
    </div>
<script>
var app = new Vue({
  el:'#app',
  data:{
    itemArr:['aaa','bbb','ccc'],
    test1:function(){
      console.log(this.itemArr);
      // console.log(app.itemArr);
    }
  },
  methods:{
    test2:function(){
      console.log(this.itemArr);
      // console.log(app.itemArr);
    }
  }
})
</script>    
</body>

向各位大神请教个问题,
方法test1,test2 分别写在data 和 methods里。

现在打印的话,写在test1的undefined,test2正常打印。
都是function(){下的this},为什么test1是undefined呢?

还有就是,如果把this,替换成app.itemArr 2个就都能打印了。
又是为什么呢

谢谢!

阅读 1.4k
1 个回答

test1、test2不作处理的话,里面的this都会指向windows,但是vue在初始化数据的时候,把methods中的方法用bind做了一层封装,使其里面的this指向vm(组件实例)

function initMethods(vm, methods) {
    var props = vm.$options.props;
    for(var key in methods) {
        vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题