禁止在对象中设置“新建”或“未声明”属性

时间:2015-10-08 06:53:49

标签: javascript object properties

假设我有一个带有一些属性的JavaScript对象。

var properties = {
    x : 10,
    y : 20,
    z : 30,
};

在这里,我声明并定义了属性xyz。因此,我可以分别使用properties.xproperties.yproperties.z来访问它们。

假设我现在尝试设置另一个我尚未声明的属性。

properties.foo = 100;

事实证明这是允许的,现在properties.foo被定义为100

但是,由于我从未在foo中声明var properties = { ... },我想这样做,以便当有人试图设置foo时,会抛出异常。

或者更一般地说,当有人试图设置我最初未在var properties = { ... }中声明的任何属性时,我想抛出异常。

这可能吗?

理想情况下,我仍然可以更改之前设置的属性。因此,我仍然可以毫无问题地做properties.x = 40;

我想要这样做的动机是防止在更改现有属性时输入拼写错误。例如,我打算设置properties.x = 40,但不小心写了properties.c = 40。这可能具有不期望的效果和/或引起调试头痛。

Here is an example in jsfiddle.

var properties = {
    x : 10,
    y : 20,
    z : 30,
};

console.log(properties.x); // ok, logs 10
console.log(properties.y); // ok, logs 20
console.log(properties.z); // ok, logs 30

properties.foo = 100; // should not be ok, because there is no foo in properties.

properties.x = 40; // should be ok.
console.log(properties.x); // ok, logs 40

console.log(properties.foo); // logs 100, but should be undefined.

1 个答案:

答案 0 :(得分:4)

JavaScript允许您随时添加属性。代码正在做它应该做的事情。 如果要防止这种情况,则必须使用EcmaScript5函数

Object.freeze()

在你的对象上。这使它变得不可行。