Javascript 如何将对象及其子对象声明为常量?
目前,我正在为我的学校做一个项目,目的是创建一个与数学有关的对象;我的对象与本机Javascript 如何将对象及其子对象声明为常量?,javascript,constants,Javascript,Constants,目前,我正在为我的学校做一个项目,目的是创建一个与数学有关的对象;我的对象与本机Math对象类似,因此,我希望模拟它的某些方面 在Firefox中使用控制台时,我发现某些属性(例如e、PI、和SQRT2)无法编辑(通过对它们的一点锁定来表示)。我知道有一个const声明方法,但我已经尝试了这两种方法 const obj = { prop: function(x){ return x^3^4; }, foo: "bar", bar: "foo" }
Math
对象类似,因此,我希望模拟它的某些方面
在Firefox中使用控制台时,我发现某些属性(例如e
、PI
、和SQRT2
)无法编辑(通过对它们的一点锁定来表示)。我知道有一个const
声明方法,但我已经尝试了这两种方法
const obj = {
prop: function(x){
return x^3^4;
},
foo: "bar",
bar: "foo"
}
obj.prop = -3.14;
print(obj.prop); // prints "-3.14"
……还有
const unEditable = 2.718;
var obj = {e:unEditable};
obj.e = 3;
print(obj.e); // prints "3"
是否有方法定义对象的属性,从而用户无法编辑所述属性?我的意思是,我可以给obj
分配一个变量e
一个值2.718
,这样当一个人分配obj.e
一个值“你好,世界!
,obj.e
仍然会返回2.718
笔记:
- 我看到了,这不符合我问题的需要
您可以使用
obj.defineProperty
以更高级的方式将属性添加到对象,以提供对属性行为的更多控制,例如属性是否可写
更多信息请点击此处:
编辑:用于一次定义多个属性,您可以这样使用:
var o={};
对象定义属性(o{
“e”:{
价值:2.71828,
可写:false
},
“pi”:{
价值:3.14159,
可写:false
},
“fac”:{
值:函数(num){
如果(!arguments.length)返回;
return(numHave you read maybe?在尝试他们的示例时,我的控制台向我抛出了一个TypeError:Object。defineProperty(…)
不可扩展。此方法是否普遍受支持?很抱歉,上面的CPU问题。我链接的MDN页面具有“浏览器兼容性”“第节,根据它,该方法得到了相当广泛的支持。我现在注意到.defineProperty()
方法只适用于没有属性的对象。我说的对吗?我不知道,你到底想做什么?(也就是你的代码是什么?)
var Θ = {};
Θ.e = 2.71828;
Θ.pi = 3.14159;
Θ.fac = function(num){
if(!arguments.length) return NaN;
return (num<2)?(num<0)?Infinity:1:num*Θ.fac(num-1);
}
Θ.nroot = function(n,m){
return Θ.pow(n,1/m);
}
var Θ = {};
Object.defineProperties(Θ, {
pi: {
value: 3.14159,
writable: false
},
e: {
value: 2.71828,
writable: false
}
});
// rest of editable properties go after
var o = {};
Object.defineProperties(o, {
"e": {
value: 2.71828,
writable: false
},
"pi": {
value: 3.14159,
writable: false
},
"fac": {
value: function(num){
if(!arguments.length) return;
return (num<2)?(num<0)?Infinity:1:num*o.fac(num-1);
},
writable: false
},
"nroot": {
value: function(n,m){
return o.pow(n,1/m);
},
writable: false
}
});