gpt4 book ai didi

Javascript:常量属性

转载 作者:可可西里 更新时间:2023-11-01 02:03:45 26 4
gpt4 key购买 nike

在 javascript 中,我可以将对象的属性声明为常量吗?

这是一个示例对象:

   var XU = {
Cc: Components.classes
};

   function aXU()
{
this.Cc = Components.classes;
}

var XU = new aXU();

只是在它前面加上“const”是行不通的。

我知道,我可以声明一个具有相同名称的函数(这也是一种常量),但我正在寻找一种更简单、更易读的方法。

浏览器兼容性并不重要。它只需要在 Mozilla 平台上运行,因为它适用于 Xulrunner 项目。

非常感谢!

干杯。

最佳答案

因为你只需要它在 Mozilla 平台上工作,你可以定义一个没有对应的 setter 的 getter。对于每个示例,最好的方法都不同。

在对象字面量中,有一个特殊的语法:

var XU = {
get Cc() { return Components.classes; }
};

在您的第二个示例中,您可以使用 __defineGetter__ 方法将其添加到构造函数内的 aXU.prototypethis 中。哪种方式更好取决于对象的每个实例的值是否不同。

编辑:为了帮助解决可读性问题,您可以编写类似defineConstant 的函数来隐藏丑陋之处。

function defineConstant(obj, name, value) {
obj.__defineGetter__(name, function() { return value; });
}

此外,如果您想在尝试分配给它时抛出错误,您可以定义一个只抛出错误对象的 setter :

function defineConstant(obj, name, value) {
obj.__defineGetter__(name, function() { return value; });
obj.__defineSetter__(name, function() {
throw new Error(name + " is a constant");
});
}

如果所有实例都具有相同的值:

function aXU() {
}

defineConstant(aXU.prototype, "Cc", Components.classes);

或者,如果值取决于对象:

function aXU() {
// Cc_value could be different for each instance
var Cc_value = return Components.classes;

defineConstant(this, "Cc", Cc_value);
}

有关更多详细信息,您可以阅读 Mozilla Developer Center documentation .

关于Javascript:常量属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906643/

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