如何在创建键时引用来自同一对象的键
How to reference a key from the same object when creating it?
假设我有一个这样的对象:
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;
,但我更愿意在一个命令中完成。
如果你这样声明属性,你就不能从属性本身引用属性,因为属性还不存在,你可能想尝试一种不同的方法
var time = {};
time.second = 1000;
time.minute = time.second * 60;
...
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}}()
您不能这样做,因为在解析对象时对象还不存在。
避免这种情况的唯一方法是创建一个对象,然后逐个添加键,这样您就已经有了一个具有要重用的属性的对象。
将对象更改为构造函数,即可执行以下操作:
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();
您可以使用大多数现代浏览器支持的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;
}
};
相关文章:
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)
- 如何在testcomplete+js中获取对象引用
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- JavaScript对象引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- 如何在使用声明式 Dojo 时获取对象引用