如何在jQuery中存储全局值(不一定是全局变量)?

Kri*_*use 80 javascript jquery global-variables

目前,我正在开发一个使用大量JavaScript,jQuery,Microsoft客户端JavaScript和其他库的遗留网页.底线 - 我无法从头开始重写整个页面,因为业务无法证明这一点.所以......就是这样.无论如何,我需要使用变量污染(我真的尝试过).我正在考虑三种选择 -

  1. 只需使用普通的JavaScript声明存储/检索它 - var x = 0;

  2. 使用jQuery在DOM标记中存储/检索值 - $("body").data("x", 0);

  3. 使用隐藏的表单字段,并使用jQuery设置/检索值 - $("whatever").data("x", 0);

有没有更好的办法?我查看了现有的一堆代码,我不相信该变量可以在函数中作用域.

kar*_*m79 100

您可以在jQuery对象中创建一个名称空间,如下所示:

$.mynamespace = { 
    myVar : "something", 
    myVar2 : "somethingElse" 
}; 
Run Code Online (Sandbox Code Playgroud)

要么:

$.mynamespace = {};
$.mynamespace.myVar = "something";
$.mynamespace.myVar2 = "somethingElse";
Run Code Online (Sandbox Code Playgroud)

请记住,任何名为"mynamespace"的插件方法都将被覆盖,因此请务必使用合理的名称.

  • @Pedro - 它不需要.我只是指出这是一种可能性. (5认同)

ova*_*riq 38

对我来说,处理这种情况的最好方法是在window对象中定义一个对象:

window.my_config =
{
    my_var1 : 1,
    my_var1 : 2,
    my_var1 : 3
};
Run Code Online (Sandbox Code Playgroud)

这样可以保持您的范围整洁干净.每当您使用window.my_config任何查看代码的人访问全局时,都会知道正在访问全局.

  • 这对我来说比使用jquery命名空间更有意义.这种方式是否有任何原因不能正常或更好地发挥作用? (4认同)

Ped*_*olo 6

您可以在全局范围中创建哈希并将其用作命名空间:

MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
Run Code Online (Sandbox Code Playgroud)

  • 不总是.什么都没有阻止一些流氓库覆盖你的哈希.从本质上讲,你无法避免_without_显式命名空间的问题.这就是jQuery模块创作文档为了命名空间而在jQuery对象中推荐单个哈希的原因,因为jQuery命名空间被_de facto_限制为流行的插件. (4认同)