从源码中学Vue(二)彻底搞清楚methods中的方法原理( 四 )

bind(methods[key], vm)

首先,methods[key]返回的是函数的定义了。那么这个bind是什么意思?看过我之前分享有关面向对象文章的都应该知道,这应该就是ES5中为我们提供改变this指向的函数了。

不信?

那我们去找下他的源码吧(node_modules\vue\src\shared\\util.js)

可以看到,它首先去找Function的原型下的bind方法,如果存在,就调用nativeBind原生的bind,没有的话就是polyFillBind 兼容性的bind了,很显然,这个bind方法在ES5标准中已经实现。

关于polyFillBind自定义的bind方法我前面的文章中有实现,原理和源码中不太一样。但是效果一样。

所以我们就来看下这个nativeBind的实现吧。

它传入了两个参数,1、要调用的函数,2、改变函数的this指向

好,再回过头我们去看下刚才的 bind(methods[key], vm)就好理解了。在我们调用methods里面的方法的时候,我们已经将该方法的this指向了vm,即我们的vue实例。

推荐阅读