JavaScript-Funktion mit Objekt als Argument

Mann kennst es ja aus verschiedenen jQuery-Plugins. Argumente werden als Objekt in entsprechender Notation an eine Funktion übergeben und überschreiben dabei Default-Werte. Das ist schick und hat einige Vorteile:

  • jedes Argument bekommt einen Namen und ist damit selbsterklärend
  • die Reihenfolge ist dabei vollkommen egal genauso wie, das Auslassen von Argumenten
  • sieht schick aus und ist einfach zu pflegen

Wie macht man das nun für eigene framework-unabhängige Funktionen. Ungefähr so:

var welcome = function(options) {
	// default settings
	var defaults = {
		'name'     : 'World',
		'greeting' : 'Hello'
	};
	// set options
	var o = {};
	if (typeof options !== 'undefined') {
		o = options;
	}
	for (var i in defaults) {
		if (typeof o[i] === 'undefined') {
			o[i] = defaults[i];
		}
	}
	// your function logic
	var text = o.greeting + ', ' + o.name + '!';
	console.log(text);
}

welcome({'name': 'Tommy'}); // Hello, Tommy!

welcome({
	'name': 'Tommy',
	'greeting': 'Hi'
} // Hi, Tommy! 

Ich führe hier noch eine zusätzliche Variable o ein und kopiere das options-Objekt hinein. Das braucht es normalerweise nicht. Ich finde es nur schick, wenn man sieht, was in der Funktion namentlich übergeben wird (nämlich Optionen options) und im Nachhinein kürze ich das nur zu o ab. So muss ich nicht jedes mal options ausschreiben.

Linkhub #8

neuere Einträge | ältere Einträge