Итак, я читал blog от John Resig, видел его micro-templating javascript engine и решил попробовать реализовать собственную систему управления шаблонами для javascript, чтобы углубить мое понимание наследования прототипов , Однако, как только я начал писать, у меня возникла проблема.Как вы вызываете родительские функции объекта из дочерних объектов в javascript
Для начала, вот мой базовый код:
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();
Тогда я начал работать на какой-то общий код, и я решил поставить его в полезности объекта:
_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);
},
},
И теперь , когда я пытаюсь вызвать функцию _util.template()
в моей функции set()
, я, конечно, получаю сообщение об ошибке, потому что this
указывает на объект _util
, а не объект template_manager
. Я взглянул на метод jQuery extend
, и я думаю, что я понимаю, что он делает. Мой вопрос: do нужен для реализации моего собственного/использования метода jQuery's extend
, или есть ли другой способ для меня вызвать объект template_manager
из моего объекта _util
?
(PS Я посмотрел на Дугласа Крокфорд-х article на наследование прототипа, и я думаю, что ответ, но я боюсь, что я не совсем понимаю, это все же.)
@ Крис, служит мне для того, чтобы не проверять дважды. Спасибо, что поймали это! –