在创建UTILS对象时,我试图在FORMAT_LST_COUNT属性中计算FORMAT_LST对象的属性数量
var UTILS = {
FORMAT_LST: {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
},
FORMAT_LST_COUNT: Object.keys(this.FORMAT_LST).length
}
但会导致错误“未捕获的TypeError:无法将未定义或null转换为对象”
答案 0 :(得分:1)
如果可以是一个函数
var UTILS = {
FORMAT_LST: {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
},
FORMAT_LST_COUNT: function() {
return Object.keys(this.FORMAT_LST).length
}
}
console.log(UTILS);
console.log(UTILS.FORMAT_LST_COUNT());
如果它需要是一个属性:
var UTILS = new function() {
this.FORMAT_LST = {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
};
this.FORMAT_LST_COUNT = Object.keys(this.FORMAT_LST).length
}
console.log(UTILS);
答案 1 :(得分:1)
只需将代码包装在功能块中并返回即可。否则,对象将不知道该语句,并将其解释为另一个常用值。
var UTILS = {
FORMAT_LST: {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
},
FORMAT_LST_COUNT: function() { // function block
return Object.keys(this.FORMAT_LST).length // return it
}
}
console.log(UTILS.FORMAT_LST_COUNT()) // execute it
答案 2 :(得分:1)
完全复杂,可以通过使用defineProperties
方法并将get FORMAT_LST_COUNT
定义为密钥的长度来实现。
var UTILS = Object.defineProperties({}, {
FORMAT_LST: {
value: {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
},
enumerable: true
},
FORMAT_LST_COUNT: {
get: function() {
return Object.keys(this.FORMAT_LST).length;
},
enumerable: true
}
});
console.log(UTILS);
答案 3 :(得分:0)
尝试类似的事情:
open62541_server
答案 4 :(得分:0)
在下一行中使用Object.assign()
。
var UTILS = {
FORMAT_LST: {
'FORMAT1': 'format1',
'FORMAT2': 'format2',
'FORMAT3': 'format3'
}
}
Object.assign(UTILS, {
FORMAT_LST_COUNT: Object.keys(UTILS.FORMAT_LST).length
})
console.log(UTILS);