2012-04-04 2 views
1

У меня есть небольшой класс, который расширяет объект Date в JavaScript. Один метод возвращает текущую дату в формате UTC.Определить значения по умолчанию для параметров функции JavaScript

Date.prototype.nowUTC = function(options) { 

    var now = new Date(); 

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

То, что я хотел бы сделать, это определить параметр опции как объект, который будет содержать часы, минуты и секунды, которые будут добавлены к времени. Например,

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) {}) Id предпочитают обрабатывать парметер как - как один объект - вместо передачи отдельных параметров для каждого значения.

Спасибо!

ответ

2

Вы можете сделать немного итератор, чтобы проверить свойства объекта:

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.... 
}; 
Смежные вопросы