Javascript Object из внешнего файла, программы

Я так запутался в объектной системе JavaScript. Я знаю, что все считается Object в 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,
 ...

1 ответ

Решение

Это потому что это не так. Имя переменной, 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, Здесь код назначает все свойства.

Другие вопросы по тегам