Javascript 如何从局部范围创建全局的、基于实例的对象?
我使用一个全局对象。我知道使用全局对象的缺点,但在这种情况下,我想使用它 我把这个全局对象称为对象管道b.c.它把我的模型分支到我的控制器,反之亦然…也许应该叫它对象分支…无论如何 我犯的错误是,我以为我在任何给定的时间只有一个模型在运行…但我没有,有多个 因此,我不能使用单个静态实现,我需要一个基于实例的实现,每个运行的模型一个全局对象管道 这是静态版本。MC代表模型/控制器Javascript 如何从局部范围创建全局的、基于实例的对象?,javascript,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
}
}
MC.o_p1 = function(global) {
return {
model : 'default',
result : 'continue',
page : {},
args : {},
server : {},
hash : global.localStorage.hash
}
}(window);
但现在,返回对象位于任何调用它的对象的局部范围内
我需要基于全局实例的对象
我不确定我是否考虑过这一点,或者我问的是可能的?私下拿着你的包,只需要一些访问功能:
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();
演示:私下拿着你的软件包,只需使用一些访问功能:
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();
演示:您可以传入全局范围,并在需要时使用它,如下所示:
MC.o_p1 = function() {
return {
model : 'default',
result : 'continue',
page : {},
args : {},
server : {},
hash : localStorage.hash
}
}
MC.o_p1 = function(global) {
return {
model : 'default',
result : 'continue',
page : {},
args : {},
server : {},
hash : global.localStorage.hash
}
}(window);
您可以传入全局范围,并在需要时使用它,如下所示:
MC.o_p1 = function() {
return {
model : 'default',
result : 'continue',
page : {},
args : {},
server : {},
hash : localStorage.hash
}
}
MC.o_p1 = function(global) {
return {
model : 'default',
result : 'continue',
page : {},
args : {},
server : {},
hash : global.localStorage.hash
}
}(window);
在浏览器控制台中尝试。根据需要提问
在浏览器控制台中尝试。根据需要提问。所以每个“ele”都是一个具有值“value”的对象管道?@hiroprotation我更新了我的答案。你说的“对象管道”是什么意思?对不起…这里有多少个模型变量…我不认为你可以有多个b.c.你把它放在一个模块模式中…@hiroprogator请看我添加的演示。不管怎样…你可以制作多个实例…用这个…只能有一个…b.c。这是模块模式?所以每个“ele”都是一个具有值“value”的对象管道?@hiroprogator我更新了我的答案。你说的“对象管道”是什么意思?对不起…这里有多少个模型变量…我不认为你可以有多个b.c.你把它放在一个模块模式中…@hiroprogator请看我添加的演示。不管怎样…你可以制作多个实例…用这个…只能有一个…b.c。这是模块模式?这对一行返回语句有什么影响?窗口在浏览器中是全局的——哦,等等,这是node.js吗?@hiroprotation-它没有——函数在赋值之前就被调用了。所以返回语句仍然会指向调用它的地方……我如何将这些对象弹出到全局空间?有可能这样做吗事情?这对一行返回语句有什么影响?窗口在浏览器中是全局的——哦,等等,这是node.js吗?@hiroprotation-它没有——函数在赋值之前就被调用了。所以返回语句仍然会转到调用它的地方……我如何将这些对象弹出到全局空间?有可能这样做吗?赋值作为window的一个属性,它在任何上下文中都是全局的。是的,msg是在全局上下文中定义的,因此它可以从任何地方访问。您可以向window.msg发出警报并获取消息。msg.JS不仅不在块范围内,而且在函数/构造函数范围内,内部函数可以访问父上下文中的所有内容。您可以在外部作用域中更改内容。将其指定为window的属性将使其在任何上下文中都是全局的。是的,msg是在全局上下文中定义的,因此它可以从任何地方访问。您可以向window.msg发出警报并获取消息。msg.JS不仅不在块范围内,而且在函数/构造函数范围内,内部函数可以访问父上下文中的所有内容。您可以在外部范围内更改内容。