![]() |
|
||||||||||
|
|
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
2Sergey"iLoveYou"
сергей, с примером уже разобрались давно :) вопрос только зачем он такой странный :) 2dm_nev аа... ну вот. я тебе это и сказал только не так подробно... но, имхо, этот пример все только запутывает... я думаю надо было показать наследование отдельно а вписывание методов отдельно... (хотя кто я такой чтобы ему советовать :)) ) |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Цитата:
Я что-то совсем запутался... Скажите просто что делает строчкаМожет кофе выпить? |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
2 Nox Noctis, уже разобрались?
Цитата:
Nox Noctis, я понимаю, что у тебя чувство, будто ты седьмой раз мне одно и тоже повторяешь, но я ей-ей не понимаю. |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Ребята, тут все это знают, но я скажу еще раз:
$_base получает метод Pet, иначе этот метод не вызвать. Все верно? Спасибо большое ![]() |
|
|||||
|
don't panic!
Регистрация: 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");
а в примере дебройля именно это и происходит.. мы добавляем к экземпляру класса Дог метод Пет.. просто потом его сразу удаляем после использования. |
|
|||||
|
wanted
Регистрация: Sep 2002
Сообщений: 1,737
|
Nox, понятно
меня пример смутил наличием Dog.prototype.__proto__ = Pet.prototype; вопрос, оказывается, в другом был. ![]() |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Спасибо большое, Nox Noctis ты мне очень помог. Я наконец-то понял как это работает. Метод - просто свойство, принадлежащее классу, иначе он (метод) работать не будет.
Хотя я встречал исходники, где определяется функция (метод), а потом к ней (к нему) обращаются все кто захочет - любые переменные. Например в первом кадре определяется метод formatbytes (bytes); для форматирования bytes в дружественный размер (57 Kb, 1.3 Mb), а во втором кадре левая переменная, содержащая getBytesLoaded (); обращается к formatbytes (bytes); и все работает! Это не против правил ООП? Ведь переменная, содержащая getBytesLoaded (); не имеет метода formatbytes (); в своем свойстве. Если я что-то напутал, то я уверен, что все равно соображу - рано или поздно. А вот если ты уже засыпаешь читая мои вопросы - забудь. Спасибо большое. ![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
Цитата:
![]() ладно фиг с ними с формулировками, главное чтобы ты сам понимал что сказал :)) методом называется функция, ссылка на которую хранится внутри объекта. блягодаря тому что она вызывается из объекта, указатель this указывает на объект из которого она вызвана. но функция может и не быть привязана к объекту. можно вызывать функцию саму по себе. например проверь: в аутпуте будет undefined. потому что функция вызвана НЕ как метод. если ты определяешь функцию без указания объекта в котором ее прописываешь, то она автоматически становится МЕТОДОМ того мувиклипа в котором находится код. например, если напишем в руте: function test () { // ... } то тест станет методом рута. и this внутри нее будет указывать на _левел0 |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Dear Nox Noctis, я решил больше ничего не писать в этом топике пока не стану супер ООПером (ужас), чтобы не нервировать тебя и людей, незаслуживающих такого непонимания с моей стороны...
Спасибо большое тебе (и не только тебе)... ребята, наверное мне нужно больше почитать книг "мы купили комьютер" или "видоус для чайников", так как я пребываю в полной уверенности, что this в методе DOG указывает на rover (будущий экземпляр DOG), и будучи полноценным экземпляром - может вызывать методы, в том числе PET. Спасибо ребята, я все распечатал и обязательно осилю - ваша помощь не напрасна ![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
гррррр... :))
в этом примере ПЕТ ЭТО НЕ МЕТОД КЛАССА ДОГ понимаешь ? :) в описании класса нету такого метода. его ВРЕМЕННО делают методом объекта РОВЕР (в результате чего, как ты и сказал, this внутри Pet'а указывает на ровера) но если бы этого не сделали (всей этой ботвы с переменной $_base) то внутри Pet'а this указывал бы на _level0, где и прописан изначально... |
![]() |
Часовой пояс GMT +4, время: 08:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|