![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Яски, я прошу написать не по отдельности все принципы ООП, а все вместе, пример на AS3 я привел. Истинно объектно-ориентированным языком можно назвать тот язык, который позволяет на уровне языка реализовать три принципа ООП сразу вместе на парочке классов, а не по отдельности, причем, реализованных средствами самого языка, а не руками, как тут уже всю тему пытаются сделать.
В AS1 у вас этого не получится, подобную приватность не скрестить с наследованием, а полиморфизма в AS1 вообще нет ни в каком виде. AS1 вам позволяет думать в стиле ООП, но не дает вам средств работы с ним. Т. е. вы сами реализовываете наследование (ручками), сами реализовываете приватность (либо на уровне договоренности с самим собой, что некоторые методы извне вызывать нельзя), а полиморфизм держите в голове. А посему, AS1 — псевдо-ООП язык, не является истинно объектно-ориентированным, как и JavaScript. Кстати, наследование реализуется не так, как вы написали, это вообще будет ручной труд по копированию методов от предка к наследнику. Для наследования у вас есть скрытые костыли языка в виде __proto__ и __constructor__. riden, то, что у вас каша в голове, созданная товарищем Гурским, наглядно показывает перепутанные caller, про который я спрашивал и callee. Возьмите, хотя бы, Essential ActionScript 2.0, все станет просто и понятно. И потом, если вы не заметили, приемлимый вариант приватности уже привели (хотя мой вариант мне гораздо больше нравится, чем у wxvxw, потому что у меня функция не видна снаружи вообще). Ваш объект активации, суть объект, в контексте которого вызывается функция, т. е. в его области видимости. При использовании кейворда new создается новая область видимости. В AS3 поведение иное, область видимости не изменяется, даже если присвоить ссылку на метод класса другому объекту. А в AS1/AS2 функция будет вызвана в области видимости того объекта, к которому она присвоена: o = new Object();
o.toString = function() {
return 'object o';
}
a = new Object();
a.toString = function() {
return 'object a';
}
function test() {
trace(this);
}
o.test = test;
a.test = test;
test(); // _level0
o.test(); // object o
a.test(); // object a
trace([test==o.test, test==a.test]); // true,true
Последний раз редактировалось etc; 01.07.2008 в 10:47. |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 __etc:
Цитата:
А this - всегда указывает на "объект активации", то есть если функция не будет вызвана, инициализирована - то this==undefined. Цитата:
И не приплетайте сюда больше this из классового ООП, там this указывает всегда на класс (и соответственно на каждый экземпляр), здесь - на "объект активации функции". К области видимости функции это отношение не имеет. P.S: ну и у кого каша в голове?
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 01.07.2008 в 12:09. Причина: и каждый экземпляр |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
Под вызовом, инициализацией, я подрузомевал: В любом случае, я просто писал о том, что область видимости != объект активации функции (по моему понятный термин).
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 01.07.2008 в 12:46. Причина: и подобные вещи |
|
|||||
|
стервочка (я мужик)
|
Цитата:
перечитайте пожалуйста внимательно и вдумчиво: http://www.flasher.ru/forum/showpost...&postcount=386 |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 BloodHounD:
Я помню все что писал. Я и неговорю, что во всем был последователен. На меня также подействовало AS3, и эта путаница c this. Просто я счас написал, что __etc (#391) тоже это не понимает, в последних постах (#392). Добавлено в 10:56 О, прочитал вашу ссылку, так вот о чем вы. Так это вы не понимате до сих пор о чем речь... Еще раз могу послать вас сюда #389 - Читайте внимательно код и вдумывайтесь... И еще почитайте мой пост 392 внимательно. P.S: а путаница у меня проскакивала (непоследовательность), только гораздо ранее.
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 01.07.2008 в 12:56. Причина: ссылки |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
У того же Гурского, на странице 203, написано:
Цитата:
Цитата:
Далее, вы писали в 378 посте Цитата:
согласно вашей цитате, а именно месту "на объект, который вызывает функцию" должно быть два undefined, однако получаем undefined и _level0 |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Это называется внешняя область видимости. Она не изменяется, да, а this (ссылка на рабочую область видимости, на объект, если уж вам так хочется) — изменяется.
Цитата:
Вы мой код вообще видели из поста #379? Вы внимательно читали пост #391 в отношении к областям видимости и делегированию или нет? Похоже, что нет, о чем тогда разговаривать? p.S.: Есть одна хорошая цитата из книги «Объектно-ориентированное программирование на ActionScript 1» Брендана Холла и Сэмюэла Ван в отношении объектно-ориентированности AS1: «Наследование в ActionScript — уродливое, запутанное дело со можеством всяких ям и ловушек. Плохо, что приходится столько знать о внутреннем устройстве ActionScript, чтобы заставить работать такое элементарное понятия ООП, как наследование». |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 Inils: ну я же понятно написал, о различии вызова объектом и методом, или нет?
Поэтому и называется - "объект активации функции". Процитирую свой отредактированный пост: Цитата:
__________________
видеоигры - высший вид искусства |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 __etc:
Цитата:
Цитата:
P.S: нет, похоже, это у вас все таки каша в голове.
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 01.07.2008 в 13:15. Причина: как и в AS3 |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:55. |
|
|
« Предыдущая тема | Следующая тема » |
|
|