Я пытаюсь понять шаблон модуля с добавленным наследованием. Я исхожу из университетского опыта, в основном с Java в моем багажнике, но я работаю с веб-технологиями около десяти лет. Я всего лишь год на JavaScript, хотя ...Grasping «OOP» JavaScript: шаблон модуля с наследованием
В любом случае, я пытаюсь использовать простой наследование (.prototype
). С объекта People
вы можете добавить Gentleman
, а затем перечислите их, используя их метод .toString()
. A Gentleman
является ребенком до Human
. Все прошло хорошо, пока я не реализовал «абстрактный» Human
, но теперь код не будет работать.
Прокомментируйте, что считается моим кодом. Я хотел бы остаться с модулем/прототипом, хотя, но что я делаю неправильно? Я также слушал бы то, что this
означает в разных контекстах. I.e., в People
Я могу использовать частный _people
напрямую, но в подмодулях я должен использовать this._name
--why?
var People = People || {};
People = (function() {
var People = function(){
this._people = [];
};
var addGentleman = function (name) {
this._people.push(new People.Gentleman(name));
};
var getList = function() {
var temp = [];
for (var i = 0; i < this._people.length; i++) {
temp.push(this._people[i].toString());
}
return temp;
};
People.prototype.constructor = People;
People.prototype.addGentleman = addGentleman;
People.prototype.getList = getList;
return People;
})();
People.Human = (function() {
var Human = function (name, hasLadyParts) {
this._name = name;
this._hasLadyParts = hasLadyParts;
};
var hasLadyParts = function() {
return this._hasLadyParts;
};
var toString = function() {
var str = this._name;
if (!this._hasLadyParts) str += ' no';
return str + ' lady parts.';
};
Human.prototype.constructor = Human;
Human.prototype.hasLadyParts = hasLadyParts;
Human.prototype.toString = toString;
return Human;
})();
People.Gentleman = (function() {
var Gentleman = function (name) {
People.Human.call(this, name, false);
}
var toString = function() {
return 'Mr.' + People.Human.toString();
};
// Gentleman.prototype = Object.create(People.Human.prototype);
Gentleman.prototype.constructor = Gentleman;
Gentleman.prototype.toString = toString;
return Gentleman;
})();
$(function() {
var people = new People();
people.addGentleman('Viktor');
people.addGentleman('Joakim');
var list = people.getList();
var $ul = $('#people');
for (var i = 0; i < list.length; i++) {
$ul.append('<li>' + list[i] + '</li>');
}
});
Fiddle: http://jsfiddle.net/5CmMd/5/
Edit: Я обновил код и немного доделать. Если я получу эту работу, я думаю, что я понимаю большую часть дизайна. Этот пример также будет работать как простой учебник для будущих программистов ООП, посещающих территорию JavaScript, я думаю.
Можете вы дать ссылку на описание рисунка? Я вижу ряд вещей, которые не будут работать, но Id скорее выражает это с точки зрения шаблона, на который вы работаете. –
Этот рисунок на самом деле не очень хорошо описывается. Я пытаюсь совместить то, что мне кажется правильным, и то, что считается приемлемым в обсуждениях JS. Одна очень быстрая попытка по этой схеме: http://stackoverflow.com/questions/8683125/combining-inheritance-with-the-module-pattern Но, черт возьми, не стесняйтесь изменять то, что вы хотите, и я могу прочитать большинство объяснений если они четко определены. :) – Viktor