![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Стал тут выдирать из кодов всякие вкусные фрагменты и формировать из них некую либу.
По мере формирования оной пришел к выводу, что все-таки мне нужны классы и ООП. По сути - думал, что надо new my_class() и в каждой инстанции будут храниться свои переменные данные и т.п. Но попробовал все-таки сделать через функции. Упрощенно это выглядит так: То есть все работает так, как и планировалось. Два вызова одной и той же функции имеют свои разные локальные переменные. Классы не понадобились. Я в замешательстве. В двух словах мне может кто-то объяснить - как и почему оно работает? Отработавшая функция создает какой-то инстанс? |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Цитата:
На самом деле в initACCU идет засорение памяти с помощью вложенных функций. Как это работает? 1. Запускаем initACCU 2. Грубо говоря, создается новый объект с полем "getAccu", значением которого является функция. При чем функция, создаваемая каждый новый раз, как вызывается initACCU. Когда обращаемся к AC1.getAccu() ( или AC2.getAccu() ) — по-сути, обращаемся к двум разным методам. Но благодаря тому, что они "обернуты" в два разных объекта, а сами называются одинаково, и создается ощущение, что "Вроде все одинаково, а результаты разные". Но относительно инстансов классов — это все весьма ложные ощущения, которые при серьезной задаче сильно осложнят всё. Лучше использовать по-честному классы. Данный код можно и по-другому написать, кстати: var a1 = {v:1, getV : function(){ return this.v }}; var a2 = {v:2, getV : function(){ return this.v }}; a1.getV(); // 1 a2.getV(); // 2 Добавлено через 3 минуты Еще вариант, но уже более близкий к классам: Но точно не уверен, что будет работать. Просто с прототипами в ас2 стал разбираться уже после того, как хорошенько познакомился с ас3, поэтому исключительно поверхностно.
__________________
hauts.ru |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Фукнция возвращаемая из функции, продолжает ссылаться на объект активатор функции (из которой её вернули). В ас2 использовал в делегате + для вызова обработчика с параметрами.
|
|
|||||
|
Угу... спасибо, буду обдумывать. Буду пробовать твой вариант. Интересно. Почитаю попробую.
Добавлено через 1 минуту ВОТ! Вот теперь понятно откуда ноги растут! Спасибо! Добавлено через 5 минут Цитата:
)))) |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
По сути ты сделал класс initACCU.
AS2 классы так и создаются. Компилятор их просто разворачивает в функции типа class mypack.MyClass { var myProp = "myProp"; function MyClass(param){ trace("constructor" + param); } function mymethod() { trace("mymethod " + myProp); } }
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:49. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|