Начните с более простого примера прототипов и наследования, кстати, не требующего дополнительных функций
:
function Car() {
}
Car.prototype.constructor = Car
// Определяем новый метод "класса" Car.
Car.prototype.drive = function() {
}
//** Производный "класс" Zaporojets
function Zaporojets() {
}
// Говорим, что прототип Car - "класс" Zaporojets.
Zaporojets.prototype = new Car();
// Определяем новый метод "класса" Zaporojets.
Zaporojets.prototype.crack = function() {
}
Тогда и свой код поймете быстрее. В принципе, в JS не требуется особых промежуточных функций для объявления прототипов и наследования прототипов.
Или вот еще метод работы с прототипами и наследования классов:
Car = function() {
document.writeln("Вызван конструктор Car().<br/>");
}
// Определяем новый метод "класса" Car.
Car.prototype.drive = function () {
document.writeln("Вызван Car.drive().<br/>");
}
Zaporojets = function() {
document.writeln("Вызван конструктор Zaporojets().<br/>");
var car = new Car();
var $this = this;
car.color = function (color) {
$this.color(color);
}
car.crack = this.crack;
// скопировать метод drive родителя в замыкание
var super_drive = car.drive;
/* перекрыть метод */
car.drive = function(distance) {
document.writeln("Вызван Zaporojets.drive().<br/>");
// вызвать родительский метод
return super_drive.call(this, distance);
}
car.constructor = arguments.callee;
return car;
}
// Определяем новый метод "класса" Zaporojets.
Zaporojets.prototype.crack = function () {
document.writeln("Вызван Zaporojets.crack().<br/>");
}
Zaporojets.prototype.color = function (color) {
var c = color || 'white';
document.writeln("Вызван Zaporojets.color(); Цвет: " + c + '<br/>');
}
document.writeln("Программа запущена.<br/>");
// Создаем объект производного "класса" Zaporojets.
var vehicle = new Zaporojets();
vehicle.drive(); // вызывается функция базового объекта
vehicle.color();
document.writeln("<br/>---------------------------------<br/><br/>");
// Создаем еще один объект того же класса.
var other = new Zaporojets();
other.crack(); // функция производного объекта
other.color('blue');