来自外部文件,程序的Javascript对象

时间:2014-03-10 01:13:28

标签: javascript esprima

我对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,
 ...

1 个答案:

答案 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。这是代码将所有属性分配给的地方。