将变量存储在JavaScript';窗口';对象是使用该对象的正确方式吗?
(可能)我刚刚通过在JavaScript将变量存储在JavaScript';窗口';对象是使用该对象的正确方式吗?,javascript,jquery,dom,window,Javascript,Jquery,Dom,Window,(可能)我刚刚通过在JavaScript窗口中“存储”/“保存”一个变量解决了我的问题()。然而,由于我是JavaScript方面的新手,我怀疑在JavaScript窗口中存储/保存变量是否是使用该对象的“常用”/“正确”方式。是吗 例如,使用以下代码 $('.trigger').click(function() { window.trigger_link = this; }); 是否可取?在JavaScript中,任何全局变量实际上都是窗口对象的属性。使用其中一个等同于使用另一个(并且可
窗口中“存储”/“保存”一个变量解决了我的问题()。然而,由于我是JavaScript方面的新手,我怀疑在JavaScript窗口中存储/保存变量是否是使用该对象的“常用”/“正确”方式。是吗
例如,使用以下代码
$('.trigger').click(function() {
window.trigger_link = this;
});
是否可取?在JavaScript中,任何全局变量实际上都是窗口
对象的属性。使用其中一个等同于使用另一个(并且可以互换)
使用全局变量肯定是“常见的”,所以问题在于它是否“合适”,因为它们可以从任何函数访问,并且您可能会有多个函数试图读取和写入相同的变量。(对于任何环境中的任何编程语言都是如此,而不仅仅是JavaScript。)
通过创建一个实例来解决这个问题。最简单的方法是创建具有唯一名称的全局对象,并将变量作为该对象的属性:
window.MyLib = {}; // global Object container; don't use var
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }
MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7
另一种方法是将变量附加到相关的DOM元素。这在所有情况下都不实用,但这是一种很好的方法,可以获得可以全局访问的变量,而不必将它们留在全局命名空间中。另一种模式可以在应用程序中创建唯一的命名空间
function myApp()
{
var value = 5;
function addToValue(x)
{
value += x;
}
}()
如果希望以后可以访问函数/值,可以将它们存储在如下对象中:
function myApp()
{
this.value = 5;
this.addToValue = function(x)
{
this.value += x;
}
}
var myInstance = new myApp();
这里实际上没有提到的,并且可能是最大的交易破坏者,为什么不使用窗口作为全球范围运营商是因为它在某些情况下可以冻结(不可写)(我是从基于生产的经验讲的)
一个好的模式实际上只是创建一个全局变量,用于应用程序中的所有公共内容
var Application = {};
Application.state = { name: 'Application' }
.
.
我发现javascript中最好的模式是使用全局状态。你能描述一下窗口何时可以被冻结吗?bumping@dagoltz question我喜欢使用一个尽可能安全唯一而又不太神秘的名称<代码>应用程序
是一个相当通用的名称,可以由其他脚本使用,将其分配给空对象将覆盖已有的名称。我之所以要写这篇文章,是因为Adobe Analytics使用了window.s对象,我认为它是一个非常通用的全局标识符。由于遗留目的,它很可能一直如此。代码与jQuery使用的$冲突的情况也有很多。我直到现在还没有看到带有问题的注释,所以我不记得是什么原因,我知道我在私有模式下使用Safari时遇到了问题。King Holly我同意,“追溯性应用”一词太笼统,最好使用您的产品/应用名称。