gpt4 book ai didi

javascript - Javascript 中的静态变量只设置一次

转载 作者:行者123 更新时间:2023-12-03 23:34:36 27 4
gpt4 key购买 nike

为了完成这项工作,我费尽了心思……特别是对于 html5 检测脚本。我想要一个只设置一次并且不能再次覆盖的变量。就是这样:

var StaticConfiguration = {};
StaticConfiguration.Main = {
_html5: null
}
StaticConfiguration.getVariable = function(name) {
return StaticConfiguration.Main["_" + name];
}
StaticConfiguration.setVariable = function(name, value) {
if(StaticConfiguration.Main["_" + name] == null) {
StaticConfiguration.Main["_" + name] = value;
}
}

首先,我定义了一个包含所有这些变量的全局对象 StaticConfiguration - 在我的例子中,只是“html5”。我将它设置为 null,因为我想在应用程序中设置它。为此,我调用

StaticConfiguration.setVariable("html5", "true");

那就定了。如果我再次尝试设置它,它会失败——当然,因为 _html5 不再为 null。所以我实际上使用下划线来“隐藏”静态变量。

这对我帮助很大。我希望这是一个好方法 - 如果不是请告诉我 :)

最佳答案

首先,它是 true,而不是 "true" 所有 字符串(除了空字符串)计算为 true,包括字符串“假”

其次,您真的需要这样保护数据吗?无论如何,实际上没有任何方法可以在您的上下文中安全地运行用户的 Javascript。总有办法绕过这样的保护。如果有问题的代码真的很在意,它可以替换整个 StaticConfiguration 对象。

Matthew 的代码是一个更好的解决问题的方法,但它没有遵循单例模式,而是一个需要实例化的类。如果您想要一个带有“静态”变量的对象,我会更像这样。

StaticConfiguration = new (function()
{
var data = {}
this.setVariable = function(key, value)
{
if(typeof data[key] == 'undefined')
{
data[key] = value;
}
else
{
// Maybe a little error handling too...
throw new Error("Can't set static variable that's already defined!");
}
};

this.getVariable = function(key)
{
if (typeof data[key] == 'undefined')
{
// Maybe a little error handling too...
throw new Error("Can't get static variable that isn't defined!");
}
else
{
return data[key];
}
};
})();

个人旁注:我讨厌充满激情的“花括号自成一格”格式!

关于javascript - Javascript 中的静态变量只设置一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com