2015-01-15 45 views
0

大多数语言使用 '进口' 指令来加载其他模块的代码,如 的java -的NodeJS使用变量赋值来加载模块

import a.b.c 

的elisp -

(load a) 

蟒 -

from a import b 

但是,为什么nodejs使用变量表达式来加载其他模块函数,如

var a = require('a') 

我明白了,对于像tern.js-emacs的JavaScript的大多数IDE,nodeclipse都无法做到的源代码查找(加载的模块)正确,因为IDE已经运行的代码(或)做的eval到找出加载的模块对象包含的属性。

+2

的ECMAScript 5.1(https://es5.github.io/)是Node.js的运行语言。它没有导入。当ES6支持它时,节点将支持它。同时还有ES6 - > ES5转换器,如果您愿意,您可以在JS中使用导入。 – generalhenry

+0

,以便您可以使用该变量来引用返回的对象。例如'a.someMethodOfA();'。 – Todd

回答

0

可以说JS属于语言类,其中的想法,一切都是平等的对象是已经指导了其开发的“理念”的一部分。节点的require是环境提供的功能(对象),也是module对象。这种模式被称为Common JS格式。

你其实不必指定需要的功能给一个变量的结果。这在实践中很少见,但是你所调用的节点模块可能只是被调用来引发一个动作,例如可能需要sugar.js,它会改变一些本地对象,但它本身没有方法提供,因此分配返回值(在模块执行期间提供的module.exports对象)没有意义。给一个变量不分配模块的

一个更常见的例子是,当一个使用require只是抓住一些属性从模块 - 例如var x = require('module').methodOfInterest。同样,一些模块返回一个构造函数,所以你可能有时会看到var instance = new (require('ConstructorModule'))(options)(这在我看来是丑陋的;要求一般应在文件的顶部进行分组,并作用于事后才)。

注:这确实没有具体回答你的问题那么赔率是很高,它会被封闭,SO-不合适的。