0

私はこの機能を持っています:

(function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    return new Test;
})(window, document);

class Testこのコンテキストでのみアクセスできることを知っています。しかし、私はこれをしたい:

Test.init();

それを1つの変数に保存して、次のようにすると:

var t = (function() {...})();

console.log(t)返すclass itselfと、それを取得できます。でもその方法はやりたくない

この Javascript Self Invoking Functions からこのクラスを取得する方法はありますか? 可能であれば、どのように達成できますか?

ここに私が取り組んでいるフィドルがあります: http://jsfiddle.net/grnagwg8/

よろしく、

4

1 に答える 1

1

グローバルにしたい場合は、インラインで呼び出される関数内で (自己呼び出しではありません)、 on のプロパティに割り当てますwindow

(function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    window.test = new Test;  // <====
})(window, document);

それから

test.init();

window、ブラウザーでは、グローバル オブジェクトへの参照です。グローバル オブジェクトのプロパティはグローバル変数です。

ただし、一般に、グローバル変数は避けるのが最善です。これらのものが複数ある場合は、オブジェクトを使用し、それらをプロパティとして配置することを検討してください。これにより、グローバルは多数ではなく1 つだけになります。

var MyStuff = (function(window, document,undefined) {
    'use strict';
    function Test() {
        this.init = function() {
            console.log("init");
        }
    };
    return {             // <====
        foo: "bar",      // <====
        baz: "nifty",    // <====
        test: new Test   // <====
    };                   // <====
})(window, document);

それから

MyStuff.test.init();

また、「非同期モジュール定義」(AMD) ソリューションを検討することもできます。


上記では、インスタンスではtestなく使用したことに注意してください。TestJavaScriptの圧倒的な慣例は、最初にキャップされた識別子はコンストラクター関数と、場合によっては "名前空間" コンテナー オブジェクト (実際には名前空間ではありませんが、それらに適用される共通の名前です) 用であるというものです。あなたのインスタンスはコンストラクター関数ではないので...

于 2015-06-01T08:14:10.383 に答える