2012-04-04 11 views
1

Ich habe eine kleine Klasse, die das Date-Objekt in JavaScript erweitert. Eine Methode gibt nur das aktuelle Datum in UTC zurück.Definieren Sie Objektstandardwerte für JavaScript-Funktionsparameter

Date.prototype.nowUTC = function(options) { 

    var now = new Date(); 

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

Was Ich mag würde zu tun ist, um die Optionen Parameter als Objekt zu definieren, die Stunden, Minuten und Sekunden enthalten, die zu der Zeit hinzugefügt werden. Zum Beispiel

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; 
} 

Gibt es eine Möglichkeit, diese Werte vordefinieren, so habe ich nicht zu überprüfen, ob es vor dem Hinzufügen es oder eine Standardeinstellung definiert ist? (z. B. function(options = {'hours' : null, 'minutes' : null, 'seconds' : null) {}) Id bevorzugen es, den Parameter wie - als ein Objekt - zu behandeln, anstatt für jeden Wert separate Parameter zu übergeben.

Vielen Dank!

Antwort

2

Sie können ein wenig Iterator machen die Objekteigenschaften zu überprüfen:

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.... 
}; 
Verwandte Themen