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 に答える