说我有一个像这样的对象:
var time = {
'second': 1000,
'minute': 1000 * 60,
'hour' : 1000 * 60 * 60,
'day' : 1000 * 60 * 60 * 24,
'week' : 1000 * 60 * 60 * 24 * 7
};
我如何缩短它以便引用其他键?
我的意思是这样的:
var time = {
'second': 1000,
'minute': this.second * 60,
'hour' : this.minute * 60,
'day' : this.hour * 24,
'week' : this.day * 7
}
我无法使用time.foo
引用每个,因为该变量尚未初始化。我可以简单地在一个新命令上添加每个命令,例如time['hour'] = time.minute * 60;
,但我宁愿在一个命令中执行它。
答案 0 :(得分:6)
如果您因为属性尚未存在而无法引用属性,则可能需要尝试不同的方法
var time = {};
time.second = 1000;
time.minute = time.second * 60;
...
答案 1 :(得分:5)
var time = (function(){
var second = 1000,
minute = second * 60,
hour = minute * 60,
day = hour * 24,
week = day * 7;
return {
'second': second,
'minute': minute,
'hour' : hour,
'day' : day,
'week' : week
};
})();
UPD
更短:
var time = (function(){
var w, d, h, m, s;
w = (d = (h = (m = (s = 1000) * 60) * 60) * 24) * 7;
return {
second: s,
minute: m,
hour : h,
day : d,
week : w
};
})();
最后是缩小版本:
var time=function(){var a,b,c,d,e;a=(b=(c=(d=(e=1e3)*60)*60)*24)*7;return{second:e,minute:d,hour:c,day:b,week:a}}()
答案 2 :(得分:3)
你不能这样做,因为在解析它时对象还不存在。
避免这种情况的唯一方法是创建一个对象然后逐个添加键 - 所以你已经有了一个具有你想要重复使用的属性的对象。
答案 3 :(得分:3)
将对象更改为构造函数,可以执行此操作:
function Time() {
this.second = 1000;
this.minute = this.second * 60;
this.hour = this.minute * 60;
this.day = this.hour * 24;
this.week = this.day * 7;
}
// Use
var time = new Time();
答案 4 :(得分:1)
您可以使用大多数现代浏览器支持的getters语法:
var time = {
'second': 1000,
get minute () {
return this.second * 60;
},
get hour (){
return this.minute * 60;
},
get day (){
return this.hour * 24;
},
get week (){
return this.day * 7;
}
};