我只是在glide.js的索引文件中浏览了一些源代码,并且看到了以下代码:
mount (extensions = {}) {
this._e.emit('mount.before')
if (isObject(extensions)) {
this._c = mount(this, extensions, this._e)
} else {
warn('You need to provide a object on `mount()`')
}
this._e.emit('mount.after')
return this
}
因此,基本上mount (extensions = {}) {}
是Glide
类内部的方法,而在此mount方法内部调用的mount是一个要导入的函数,如下所示:
import { mount } from './core/index'
我的问题是,由于名称相同,JavaScript如何区分递归调用mount方法或导入函数?
注意:::可以在here中找到代码。
答案 0 :(得分:1)
mount (extensions = {}) {}
是一种方法,因此您可以像this.mount
或someInstance.mount
这样称呼它。 mount(this, extensions, this._e)
是一个函数,因此您不要通过对象调用它。
如果您从es5的角度来看它,我想这可能会造成混淆,因为现在看来,定义了装载功能的同时也占用了装载功能。
在es5中,这类似于
mount = function() {};
Glide = {};
Glide.prototype.mount = function() { mount(); }
这一切都与上下文和作用域有关。如果您在类或对象上定义方法,则无法从当前上下文中调用它,例如在您的浏览器中,“全局范围”将是窗口。
var frank = () => {};
将与
相同 window.frank = () => {};
如果在函数中定义函数,则由于每个函数都在其自己的范围内运行,因此无法在外部访问这些函数。
然后还有上下文的问题,我很难解释。
因此,在您的示例中,进行递归调用将是在类本身的情况下进行this.mount()
。
关于css技巧的范围和上下文/闭包的一些有趣的阅读 https://css-tricks.com/javascript-scope-closures/