Vytvářejte a obnovujte vnořené objekty pomocí jQuery

Schopnost vytvářet a načítat vnořené objekty objektivizovanou cestou řetězce je neuvěřitelně užitečná. Nejen, že nemusíte provádět ruční řetězec kontrol objektů/vlastností, abyste se vyhnuli chybám „{x} není definováno“, ale pokud svou metodu vytvoříte správně, můžete také nastavit prázdný objekt na jeho dané místo (nebo jmenný prostor , někdo by to nazval. Zde je návod, jak můžete tuto funkci přidat do jQuery objekt.

JavaScript jQuery

Protože filozofií jQuery je používat stejnou metodu pro získávání a nastavení, budeme totéž dělat pro vytváření a načítání objektů; v tomto případě použijeme obj metoda:

(function() {

	// Utility method to get and set objects that may or may not exist
	var objectifier = function(splits, create, context) {
		var result = context || window;
		for(var i = 0, s; result && (s = splits[i]); i++) {
			result = (s in result ? result[s] : (create ? result[s] = {} : undefined));
		}
		return result;
	};

	// Gets or sets an object
	jQuery.obj = function(name, value, create, context) {
		// Setter
		if(value != undefined) {
			var splits = name.split("."), s = splits.pop(), result = objectifier(splits, true, context);
			return result && s ? (result[s] = value) : undefined;
		}
		// Getter
		else {
			return objectifier(name.split("."), create, context);
		}
	};

})();

Stejně jako u alternativy MooTools, objectifier funkce stačí k tomu, aby zvládla jak získávání, tak nastavení, stejně jako provádění obojího v daném kontextu (existujícím objektu). Zde je několik příkladů, jak můžete použít nový jQuery.obj metoda:

// Check for existence
var moduleNameExists = jQuery.obj("mynamespace.widget.moduleName"); // undefined

// Create the obj
jQuery.obj("mynamespace.widget.moduleName", { prop: 1 }); // mynamespace.widget.moduleName.prop returns 1

// Create an object on existing object
jQuery.obj("subnamespace.subModuleName", { someProp: 8 }, true, mynamespace.widget);
	// mynamespace.widget.subnamespace.subModuleName = { someProp: 8 }

Jak více pracuji s jQuery, jak s jeho poskytovanými metodami, tak s dalšími nástroji třetích stran, přístup k libovolným objektům pomocí řetězce a někdy kontextu mi umožňuje vyhnout se tanci ručních kontrol existence objektů a vlastností. Samozřejmě podstatou tohoto skriptu je skutečně objectifier metodu, kterou lze přidat do libovolného rámce nebo sady nástrojů, ale s rámcem tak populárním, jako je jQuery, proč ho prostě nezveřejnit pro všechny?