Więc czytałem o blog Johna Resiga, zobaczyłem jego micro-templating javascript engine i postanowiłem spróbować zaimplementować własny system zarządzania szablonami dla javascript, aby pogłębić wiedzę na temat dziedziczenia prototypów . Jednak w momencie, w którym zacząłem go pisać, natknąłem się na problem.Jak wywołać funkcje obiektu nadrzędnego z obiektów podrzędnych w javascript
Aby rozpocząć, tutaj jest mój kod bazowy:
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();
Potem rozpoczął pracę nad jakimś wspólnym kodzie, i zdecydowałem się umieścić go w obiekt użytkowy:
_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);
},
},
a teraz , kiedy próbuję wywołać moją funkcję _util.template()
w mojej funkcji set()
, oczywiście dostaję błąd, ponieważ this
wskazuje obiekt _util
zamiast obiektu template_manager
. Spojrzałem na metodę jQuery extend
i myślę, że rozumiem, co robi. Moje pytanie brzmi, czy muszę potrzebować do wdrożenia mojej własnej/użyć metody jQuery's extend
, czy istnieje inny sposób, aby zadzwonić do obiektu template_manager
z mojego obiektu _util
?
(PS szukałem w Douglas Crockforda na article na prototypowego dziedziczenia i myślę odpowiedź brzmi nie, ale obawiam się, że nie w pełni zrozumieć go jeszcze.)
@ Chris, służy mi dobrze, aby nie podwójnie sprawdzać. Dzięki za złapanie tego! –