0

我有一个使用的全局对象。我知道使用全局对象的缺点,但在这种情况下我想使用它。

我称这个全局对象为对象管道 bc 它将我的模型分支到我的控制器,反之亦然......也许应该称之为对象分支......无论如何......

我犯的错误是我认为在任何给定时间我只有一个模型在运行……但我没有,有多个。

因此,我不能使用单个静态实现,我需要基于实例的一个,每个运行的模型都有一个全局对象管道。

这是静态版本。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 回答