V době, kdy zemi vládly rámce JavaScript, jako jsou MooTools a jQuery, jsme všichni psali výukové programy, které byly koncipovány spíše k danému rámci namísto vanilkového JavaScriptu. Smutné ale pravdivé. V současné době se vyhýbám příspěvkům orientovaným na rámec, protože Node.js ovládlo svět a sady JavaScriptu přicházejí a odcházejí.
Jeden velmi užitečný příspěvek, který jsem napsal a stále miluji, je Vytváření a načítání vnořených objektů pomocí MooTools. V tomto příspěvku jsem vám ukázal, jak můžete snadno získat a nastavit vnořené objekty, protože provádět kontroly existence v řetězci objektů ručně je ... ošklivé. Pojďme tuto funkci vytrhnout z orientace MooTools, abyste si ji mohli vzít s sebou, kamkoli půjdete!
JavaScript
Použijeme jednoduchou okamžitě spouštěcí funkci k zabalení podkladové „pracovní“ funkce a vrátíme objekt s vlastnostmi pro získání, nastavení a kontrolu existence:
var Objectifier = (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; }; return { // Creates an object if it doesn't already exist set: function(name, value, context) { var splits = name.split('.'), s = splits.pop(), result = objectifier(splits, true, context); return result && s ? (result[s] = value) : undefined; }, get: function(name, create, context) { return objectifier(name.split('.'), create, context); }, exists: function(name, context) { return this.get(name, false, context) !== undefined; } }; })();
Jak byste tedy tuto sadu funkcí používali? Zde je několik příkladů použití:
// Creates my.namespace.MyClass Objectifier.set('my.namespace.MyClass', { name: 'David' }); // my.namespace.MyClass.name = 'David' // Creates some.existing.objecto.my.namespace.MyClass Objectifier.set('my.namespace.MyClass', { name: 'David' }, some.existing.objecto); // Has to be an existing object // Get an object Objectifier.get('my.namespace.MyClassToo'); // Try to find an object, create it if it doesn't exist Objectifier.get('my.namespace.MyClassThree', true); // Check for existence Objectifier.exists('my.namespace.MyClassToo'); // returns TRUE or FALSE
Všimněte si, že jsem nerozšířil Object
prototyp; můžete, ale od této praxe jsme přešli.
Tyto funkce používám téměř na každém projektu, na kterém pracuji. Považuji je za velmi užitečné při práci s API, protože nikdy nemůžete předpokládat, že existuje objektový řetězec. Přál bych si, abych tento kód zahrnul do svého příspěvku 7 základních funkcí JavaScriptu!