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
  }
});