1

JavaScript で Date オブジェクトを拡張する小さなクラスがあります。1 つのメソッドは、現在の日付を UTC で返すだけです。

Date.prototype.nowUTC = function(options) {

    var now = new Date();

    return new Date(now.getUTCFullYear(), 
                    now.getUTCMonth(), 
                    now.getUTCDate(), 
                    now.getUTCHours(), 
                    now.getUTCMinutes(), 
                    now.getUTCSeconds());
}

私がやりたいのは、時間に追加される時間、分、および秒を含むオブジェクトとして options パラメーターを定義することです。例えば、

Date.prototype.nowUTC = function(options) {

    var now = new Date();

    return new Date(now.getUTCFullYear(), 
                    now.getUTCMonth(), 
                    now.getUTCDate(), 
                    now.getUTCHours() + options.hours, 
                    now.getUTCMinutes() + options.minutes, 
                    now.getUTCSeconds()) + options.seconds;
}

これらの値を事前に定義する方法はありますか?追加する前に定義されているかどうかを確認したり、デフォルトを設定したりする必要はありませんか? ( などfunction(options = {'hours' : null, 'minutes' : null, 'seconds' : null) {}) 値ごとに個別のパラメーターを渡すのではなく、パラメーターを 1 つのオブジェクトとして処理することをお勧めします。

ありがとうございました!

4

2 に答える 2

3

オブジェクトのプロパティをチェックする小さな反復子を作成できます。

Date.prototype.nowUTC = function(options) {

    // Object holding default values for this function
    var defaults = {
      "hours": <default>,
      "minutes": <default>,
      "seconds": <default>
    };

    // Iterate over the options and set defaults where the property isn't defined.
    for (var prop in defaults)  {
      options[prop] = options[prop] || defaults[prop];

      // Note: if options would contain some falsy values, you should check for undefined instead.
      // The above version is nicer and shorter, but would fail if, for example, 
      //    options.boolVal = false
      //    defaults.boolVal = true
      // the defaults would always overwrite the falsy input property.
      options[prop] = typeof options[prop] !== 'undefined' ? options[prop] : defaults[prop];
    }

    var now = new Date();
    // Rest of your function, using the options object....
};
于 2012-04-04T19:34:50.047 に答える