Показать сообщение отдельно
Старый 04.12.2003, 13:24
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 2  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
прототип - это шаблон. что такое шаблон - знаем? :)

прототип объектов класса нужен для того чтобы не приходилось В КАЖДЫЙ объект этого класса копировать все методы и свойства, даже если они у всех объектов этого класса одинаковые...

когда метод или свойство записано в прототип, они НЕ КОПИРУЮТСЯ в каждый объект - они НАСЛЕДУЮТСЯ от класса... при обращении методу/свойству объекта сначала просматривается сам объект на наличие такого метода/свойства, если такого "собсвенного" метода/свойства в этом объекте нет, то просматривается прототип.

иллюстрация вышесказанному:
Код:
cls1 = function (name) {
	this.name = name;
};
cls1.prototype.a = function() {
	trace("inherited method from "+this.name);
};
//
// 1. INHERITED method 'a'
test = new cls1("object1 of cls1");
test.a(); // inherited method 'a' from object1 of cls1
//
// 2. own method 'a'
test.a = function() {
	trace("method 'a' from "+this.name);
};
test.a(); // method 'a' from object1 of cls1
//
// 3. INHERITED method 'a'
delete test.a;
test.a(); // inherited method 'a' from object1 of cls1
что сделали:
1. вызвали метод наследственный от класса
2. создали прямо в объекте метод и вызвали
3. удалили метод из объекта и вызвали его снова

то есть метода в самом объекте нет, но он вызывается по механизму наследования