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

Регистрация: Aug 2001
Сообщений: 4,121
хмм... ну все же написано уже :)
а у дебройля вообще длинно и подробно разжевано...

смотри:
Код:
Pet = function (name) {
	trace("test : "+this+" : "+this.test);
};
Dog = function (name) {
	trace("is Pet function here ? "+(Pet ? "yes" : "no"));
	Pet();
	trace("is this.Pet function here ? "+(this.Pet ? "yes" : "no"));
	this.Pet();
};
Dog.prototype.test = "this is a Dog class member";
rover = new Dog("Rover");
убрали все лишнее..

в конструкторе Дог смотрим видна ли функция (ЭТО НЕ МЕТОД) Pet в данной области видимости имен. потом проверяем то же самое для this.Pet...

this.Pet естесственно не видна. если бы мы сделали так:
Код:
Pet = function (name) {
	trace("test : "+this+" : "+this.test);
};
Dog = function (name) {
	trace("is Pet function here ? "+(Pet ? "yes" : "no"));
	Pet();
	trace("is this.Pet function here ? "+(this.Pet ? "yes" : "no"));
	this.Pet();
};
Dog.prototype.test = "this is a Dog class member";
Dog.prototype.Pet = Pet
rover = new Dog("Rover");
то все бы заработало. потому что мы добавили к классу Дог МЕТОД Pet.

а в примере дебройля именно это и происходит.. мы добавляем к экземпляру класса Дог метод Пет.. просто потом его сразу удаляем после использования.