vue组件定义methods使用箭头函数
直接从问题开始吧。
第一种情况代码:
say hellow
export default {
methods: {
sayHello() {
console.log('hello:',this);
}
}
}
运行结果:
第二种情况:
say hellow
export default {
methods: {
sayHello: () => {
console.log('hello:',this);
}
}
}
运行结果:
你能解释出为什么会这样么?
vue源码分析——从模板解析到运行时事件绑定
我们先通过源码来分析一下整个流程(vue@2.5.17的dist/vue.common.js)。
v-on的解析
分析事件绑定,先去找v-on的实现代码:
dist/vue.common.js
通过搜索,我定位了这样一段代码。
这个函数是处理模板中的属性的,其中有个分支是处理 v-on指令的
v-on:click.native.stop="sayHello"
这里的name就是click,value就是sayHello,而native和stop就是modifiers,el为传进来的当前解析的元素。
addHandler顾名思义就是给当前的xx事件绑定一个handler,我们接着去看addHandler的实现。
dist/vue.common.js
删掉了一些无关代码后的addHandler方法如图,开始是处理各种modifier,然后是创建一个newHandler,加到事件的handlers数组中去,因为我们这里只绑定了一个handler,所以走的else的分支。
到这,元素的click已经绑定了handler了。
模板编译流程
说起来,通过搜索定位到某段代码并不能吧流程看全,我们从模板编译的入口开始看。
你可以在vue@2.5.17的dist/vue.common.js文件的最后看到: