2

我经常有这样的情况:

var obj = { field: 2 };

并在代码中:

do_something( obj.fiel ); // note: field spelt wrong

ie 属性输入错误。我想尽早发现这些错误。

我想密封对象,即 obj = Object.seal(obj);

但这似乎只能防止错误obj.fiel = 2;,并且在简单读取字段时不会引发错误。

有什么方法可以锁定对象,以便检测并抛出对缺失属性的任何读取访问?

谢谢,保罗

编辑:有关情况的更多信息

  1. 纯javascript,没有编译器。
  2. 没有经验的程序员用于数学计算的库。我想限制他们的错误。我可以发现一个拼写错误的变量,但他们不能。
  3. 希望尽可能早地检测到尽可能多的错误。即在编译时(最好),在运行时一旦遇到拼写错误(ok)就会抛出错误,或者在分析结果并发现不正确的计算输出时(非常非常糟糕)。
  4. 单元测试并不是一个真正的选择,因为数学的目的是发现新知识,因此数学的答案通常是事先不知道的。再一次,没有经验的程序员很难教他们单元测试。
4

2 回答 2

1

我不认为这将在 Javascript 中起作用,因为对象是像 JSON 一样编写的,因此属性将是未定义的或 null 但不会引发错误。

解决方案将是编写本机 getter/setter。

var obj = {
    vars: {},

    set: function(index, value) {
        obj.vars[index] = value;
    },

    get: function(index) {
        if (typeof(vars[index]) == "undefined") {
            throw "Undefined property " + index;
        }

        return vars[index];
    }
};
于 2012-12-07T05:56:53.007 回答
0

现在 javascript 中没有可靠的 getter/setter。您必须手动检查它。这是一种方法:

if (!('key' in object)) {
    // throw exception
}
于 2012-12-07T06:19:54.740 回答