1

たとえば、次のコードをご覧ください。

(function(foo) {

    foo.init = function() {};

    // other public/private methods here.

    return foo;

}(window.FOO = window.FOO || {}));

私はそれを次のように呼びます:

FOO.init();

ユーザーが定義できるようにすることは可能FOOですか?

window.FOOつまり、 ;の複数のインスタンスを許可する必要があります。たとえば、and のようwindow.BILLYwindow.BAZ(または、and である必要がwindow.billy.FOOありwindow.baz.FOOますか?)。

言い換えれば、上記の構成と初期化のバリエーションを使用して「名前空間」に名前空間を(ユーザーに許可する)エレガントな方法はありますか?

4

3 に答える 3

2

windows.billy.FOOwindows.baz.FOOが優先されます。

Addy Osmani の Essential JS Namespacing Patternsを読んで理解を深めてください(最も関連性の高い部分: Deep object extension)。

乾杯!

于 2013-01-30T20:39:53.600 に答える
2

あなたが正しく理解している場合は、上記のコードを の名前FOOが動的になるように変更してください。[] プロパティ アクセサーを使用して、これを行うことができます。

function initFoo(fooName) {
    (function(foo) {

        foo.init = function() {};

        // other public/private methods here.

        return foo;

    }(window[fooName] = window[fooName] || {}));
}

initFoo('FOO');
initFoo('BILLY');

しかし、これがどのような意味を持つのかわかりません。あなたの例は非常に抽象的です。

于 2013-01-30T20:43:21.267 に答える
1

RequireJS を調べることをお勧めします: http://requirejs.org/docs/start.html

探しているエンドユーザー機能が含まれている場合があります。

于 2013-01-30T20:38:18.373 に答える