4

次のようなオブジェクトがあるとします。

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;でもかまいませんが、1つのコマンドで追加したいと思います。

4

5 に答える 5

6

プロパティがまだ存在しないため、そのように宣言している場合、それ自体からプロパティを参照することはできません。別のアプローチを試してください。

var time = {};
time.second = 1000;
time.minute = time.second * 60;
...
于 2012-09-12T21:44:58.320 に答える
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}}()
于 2012-09-12T21:47:02.193 に答える
3

解析中のオブジェクトはまだ存在しないため、これを行うことはできません。

これを回避する唯一の方法は、オブジェクトを作成してからキーを 1 つずつ追加することです。そのため、再利用したいプロパティを持つオブジェクトが既に存在します。

于 2012-09-12T21:44:36.447 に答える
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();
于 2012-09-12T21:45:25.247 に答える
1

最新のブラウザーでサポートされているゲッター構文​​を使用できます。

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;
     }
};
于 2012-09-12T22:02:27.303 に答える