Javascript 如何在jQuery中存储全局值(不一定是全局变量)?
目前,我正在开发一个使用大量JavaScript、jQuery、Microsoft客户端JavaScript和其他库的遗留网页。底线-我不能从头重写整个页面,因为业务无法证明这一点。所以事实就是这样。无论如何,我需要用一个变量污染全局名称空间(我真的不太尝试)。有三种选择我一直在考虑-Javascript 如何在jQuery中存储全局值(不一定是全局变量)?,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,目前,我正在开发一个使用大量JavaScript、jQuery、Microsoft客户端JavaScript和其他库的遗留网页。底线-我不能从头重写整个页面,因为业务无法证明这一点。所以事实就是这样。无论如何,我需要用一个变量污染全局名称空间(我真的不太尝试)。有三种选择我一直在考虑- 只需使用普通JavaScript声明存储/检索它-var x=0 使用jQuery存储/检索DOM标记中的值-$(“body”).data(“x”,0) 使用隐藏的表单字段,并使用jQuery设置/检索值-$(“
var x=0代码>
$(“body”).data(“x”,0)代码>
$(“whatever”).data(“x”,0)代码>
有更好的办法吗?我查看了现有的一堆代码,我不相信变量可以在函数中确定作用域。您可以在jQuery对象中创建名称空间,如下所示:
$.mynamespace = {
myVar : "something",
myVar2 : "somethingElse"
};
或:
请记住,任何名为“mynamespace”的插件方法都将被覆盖,因此请确保使用合理的名称。您可以在全局范围内创建哈希并将其用作命名空间:
MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
与您分享我的实践,我会在所需的JavaScript文件中创建一个带有合理前缀的全局对象/var,就像我正在处理一个页面,其中该对象将是一个文本框,然后我会将其命名为:
g_TxtMyValue = 'value'; // g_ specifies it to be a global variable, it is one
// of the many conventions used
如果有多个全局变量,还可以有一个命名空间,例如:
my_txt = {}; // For a real site I would use a prefix relative to the project
// name instead of "my".
my_txt.testValueOne = 'Value one';
my_txt.testValueOne = 'Value two';
这些变量在初始化后将在整个网站上为您提供
我希望这能有所帮助。对我来说,处理这种情况的最佳方法是在窗口对象中定义一个对象:
window.my_config =
{
my_var1 : 1,
my_var1 : 2,
my_var1 : 3
};
这将使您的范围保持整洁。无论何时使用窗口访问全局。my_config
任何查看代码的人都会知道正在访问全局。请稍等片刻:
fancybox是否在执行AJAX(意思是:如果它在iFrame中加载,则应向close方法添加“父级”),如下所示:
parent.$.fancybox.close();
使用下划线
.isEmpty(“”)
将返回true
为什么名称空间变量应声明为jQuery的属性@佩德罗-不需要。我只是指出这是一种可能性。如果我想使用它,我应该在哪里申报?我所有的javascript代码都在一个JS文件中。我不想将JavaScript代码与HTML代码混合在一起。这是一个愚蠢的解决方案,它很容易在声明的名称空间与jQuery对象的变量和方法之间发生名称冲突。我不理解这个解决方案的价值。对我来说,这不好。我可以在所有iframe表单父级中使用此全局变量?这是一个愚蠢的解决方案,它容易在声明的名称空间和其他全局变量和方法之间发生名称冲突。我不理解这个解决方案的价值。对我来说,这太糟糕了。您可以控制全局范围中存在哪些名称,但无法控制更新时可能添加到jQuery中的方法和变量名。这是名称空间在许多语言中显式存在的一个重要原因。如果没有,名称开始变得奇怪(即:Smalltalk系统类名),但并不总是如此。没有什么能阻止某个流氓库重写您的哈希。本质上,如果没有显式的名称空间,就无法避免这个问题。这就是为什么jQuery模块编写文档建议在jQuery对象中使用单个散列来进行名称空间,因为jQuery名称空间实际上仅限于流行插件。这比使用jQuery名称空间更有意义。有没有任何理由认为这种方法不能很好或更好地发挥作用?
window.my_config =
{
my_var1 : 1,
my_var1 : 2,
my_var1 : 3
};