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?