Entonces, estaba leyendo en John Resig blog, vi su micro-templating javascript engine y decidí probar e implementar mi propio sistema de gestión de plantillas para javascript, para profundizar mi comprensión de la herencia de prototipos . Sin embargo, en el momento en que comencé a escribirlo, me encontré con un problema.Cómo se llaman funciones de objetos padre en objetos secundarios en javascript
Para empezar, aquí es mi código de base:
function template_manager() { };
template_manager.prototype = {
tags: {},
templates: {},
output: {},
default_template: "default",
set: function (tags, template_name) {
template_name = "Greetings!";
//template_name = this._util.template(this.nothing, this.default_template);
console.log(template_name);
},
get: function(tags, template_name) {
console.log("Getting");
},
unset: function(tags, template_name) {
console.log("Removing");
},
render: function(template_name) {
console.log("Rendering");
},
//_util goes here
};
// Take it for a quick test drive.
test = new template_manager;
test.set();
test.get();
test.unset();
test.render();
Entonces empecé a trabajar en un código común, y decidió ponerlo en un objeto de utilidad:
_util: {
// Used to set the default values for optional arguments
optional: function(obj, def_value) {
return (typeof obj === "nothing") ? obj : def_value;
},
template: function(template_name) {
return this._util.optional(template_name, this.default_template);
},
},
Y ahora , cuando intento llamar a mi función _util.template()
en mi función set()
, por supuesto obtengo un error porque this
apunta al objeto _util
en lugar del objeto template_manager
. Eché un vistazo al método jQuery extend
, y creo que entiendo lo que está haciendo. Mi pregunta es: ¿Necesito para implementar mi propio/use el método extend
de jQuery, o hay otra forma de que llame al objeto _util
desde mi objeto _util
?
(PS He mirado en Douglas Crockford article sobre la herencia de prototipo, y yo creo la respuesta es no, pero me temo que no entiendo completamente todavía.)
@Chris, me sirve para no hacer doble verificación. Gracias por atrapar eso! –