0

私が使用する単一のグローバル オブジェクトがあります。グローバルオブジェクトを使用することの短所は知っていますが、この場合はそれを使用したいと考えています。

私はこのグローバル オブジェクトをオブジェクト パイプ bc と呼びます。これは、モデルをコントローラーに分岐させ、その逆も同様です...オブジェクト ブランチと呼ぶべきだったのかもしれません...とにかく...

私が犯した間違いは、常に 1 つのモデルしか実行していないと思っていたことです...しかし、そうではありません。複数あります。

したがって、単一の静的実装を使用することはできません。実行中のモデルごとに 1 つのグローバル オブジェクト パイプであるインスタンス ベースの実装が必要です。

ここに静的バージョンがあります。MCはモデル/コントローラーの略です。

/********************************************************************************************
 *
 * MC - Model/Controller Types
 *
 *******************************************************************************************/

var MC = {};

/**
 **  Object Pipe
 */

MC.o_p = {
    model  :  'default',
    result :  'continue',
    page   :  {},
    args   :  {},
    server :  {},
    hash   :  localStorage.hash
};

私はこのようなことを考えました:

MC.o_p1 = function() {
    return {
        model  :  'default',
        result :  'continue',
        page   :  {},
        args   :  {},
        server :  {},
        hash   :  localStorage.hash
        }
}

しかし今、戻りオブジェクトは、それを呼び出したもののローカルスコープにあります。

グローバル インスタンス ベースのオブジェクトが必要です。

私がこれを考えすぎているのか、それとも私が求めていることが可能なのかわかりませんか?

4

3 に答える 3

3

パッケージを非公開に保持し、いくつかのアクセス機能のみを使用します。

var myModel = (function() {

    var model_vars = {
        model: 'default',
        result: 'continue',
        page: {},
        args: {},
        server: {},
        hash: localStorage.hash
    };

    return function() {
        this.get = function(ele) {
            if (model_vars.hasOwnProperty(ele)) {
                return model_vars[ele];
            }

        };

        this.set = function(ele, value) {
            if (model_vars.hasOwnProperty(ele)) {
                return model_vars[ele] = value;
            }

        };

    };

})();

次に、次のことができます。

Model = new myModel();

デモ: http://jsfiddle.net/maniator/PSsQ3/

于 2012-07-30T21:38:10.703 に答える
1

次のように、グローバル スコープを渡して、必要なときに使用できます。

MC.o_p1 = function(global) {
    return {
        model  :  'default',
        result :  'continue',
        page   :  {},
        args   :  {},
        server :  {},
        hash   :  global.localStorage.hash
        }
}(window);
于 2012-07-30T21:38:33.537 に答える
1
var msg = 'window is global in browsers';

window.alert(msg);

alert('or we can just use alert without accessing from window because, '+msg);

function isWindowReallyGlobalInBrowsers(){
    window.newMsg = 'Did you see var newMsg get declared anywhere?';
    alert(newMsg + ' It works because ' +msg);
}

isWindowReallyGlobalInBrowsers();

ブラウザコンソールで試してください。必要に応じて質問してください。

于 2012-07-30T22:57:35.277 に答える