0

我对 JavaScript 的对象系统感到很困惑。我知道在 JavaScript 中一切都被视为对象,但在 Esprima 的这段代码中,我没有看到任何声明声明这个项目可以使用 esrpima 访问,如下行:( https://github.com/ariya/esprima/ blob/master/esprima.js

var syntax = esprima.parse(text);

我的问题是如何以及在何处定义类似esprima.parse(text)Javascript 的内容,以便可以将其导出为外部包并使用对象名称进行访问。我知道如何定义像 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,
 ...
4

1 回答 1

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

于 2014-03-10T01:39:55.657 回答