如何从本地范围创建基于实例的全局对象?

时间:2012-07-30 21:34:05

标签: javascript

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

我将此全局对象称为对象管道b.c.它将我的模型分支到我的控制器,反之亦然...也许应该称之为对象分支...反正......

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

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

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

但现在返回对象在本地范围内,不管是什么调用它。

我需要基于全局实例的对象。

我不确定我是不是在想这个或者我在问什么可能?

3 个答案:

答案 0 :(得分: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();

DEMO:http://jsfiddle.net/maniator/PSsQ3/

答案 1 :(得分:1)

您可以传入全局范围并在需要时使用它,如下所示:

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

答案 2 :(得分: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();

在浏览器控制台中试用它。根据需要提问。