我正在尝试提高我正在编写的一些代码的可读性。我将一个值数组传递给一个函数,并希望能够提取每个值。我想检查数组是否是预期的大小。
function useData(data) {
if (data.length != Data.Size) {
// ERROR
}
var name = data[Data.Indexes.NAME];
var age = data[Data.Indexes.AGE];
var weight = data[Data.Indexes.WEIGHT];
}
我想知道Data.Indexes
中有多少属性,我尝试了以下两种方法,
var Data = {
Indexes : {
NAME : 0,
AGE : 1,
WEIGHT : 2
},
Size : Objects.keys(Indexes).length // Doesn't work.
};
Data.Size2 = Object.keys(Data.Indexes).length; // Works.
我可以在Indexes
内找到Data
的大小吗?
答案 0 :(得分:1)
你可以使Size
- 属性成为一个函数,返回索引中的属性数,如下所示:
var Data = {
Indexes : {
NAME : 0,
AGE : 1,
WEIGHT : 2
},
Size : function() {return Object.keys(this.Indexes).length}
};
现在,您可以在功能useData()
内调用:
function useData(data) {
if (data.length != Data.Size()) {/* ERROR */}
/* ... */
}
第二种方式使Data.Size
成为getter
- 函数。这样就可以防止覆盖:
var Data = {
Indexes : { /* ... */ },
get Size() {return Object.keys(this.Indexes).length
};
每次引用时都会执行getter:
function useData(data) {
if (data.length != Data.Size) {/* ERROR */}
/* ... */
}
Data.Size = 55; // nothing happens
更新:这些方法无法保护Data.Index以防止更改。如果您需要,请查看Object.seal()和Object.freeze()。