我对JavaScript的对象系统非常困惑。我知道所有内容都被认为是JavaScript中的Object,但是在Esprima的代码中,我没有看到任何语句声明要使用esrpima访问此项目,如下所示:(https://github.com/ariya/esprima/blob/master/esprima.js)
var syntax = esprima.parse(text);
我的问题是如何以及在何处定义Javascript中的esprima.parse(text)
之类的内容,以便可以将其导出为外部包并使用对象名称进行访问。我知道如何定义像Object = {a:“B”}这样的对象;但无法找到解决这个问题的方法。请帮我!
(function (root, factory) {
'use strict';
// Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
// Rhino, and plain browser loading.
if (typeof define === 'function' && define.amd) {
define(['exports'], factory);
} else if (typeof exports !== 'undefined') {
factory(exports);
} else {
factory((root.esprima = {}));
}
}(this, function (exports) {
'use strict';
var Token,
TokenName,
...
答案 0 :(得分:0)
那是因为不。变量名称esprima
来自包含 esprima的代码。例如:
var esprima = require('esprima');
esprima.parse(text);
您可以为变量指定任何其他名称:
var foo = require('esprima');
foo.parse(text);
所有esprima.js
文件都会定义导出的对象。 不指示最终为其分配对象的变量的名称。
如果脚本是在浏览器中加载的,它实际上会明确定义esprima
。你可以在第55行看到它:
factory((root.esprima = {}));
这会创建一个对象并将其分配给root.esprima
。但它也是一个函数调用,因此该对象被传递给factory
,这是57中定义的函数,它接受参数exports
。这是代码将所有属性分配给的地方。