![]() |
Локальные переменные и инстансы функций
Стал тут выдирать из кодов всякие вкусные фрагменты и формировать из них некую либу.
По мере формирования оной пришел к выводу, что все-таки мне нужны классы и ООП. По сути - думал, что надо new my_class() и в каждой инстанции будут храниться свои переменные данные и т.п. Но попробовал все-таки сделать через функции. Упрощенно это выглядит так: Код AS1/AS2:
|
Цитата:
На самом деле в initACCU идет засорение памяти с помощью вложенных функций. Как это работает? 1. Запускаем initACCU 2. Грубо говоря, создается новый объект с полем "getAccu", значением которого является функция. При чем функция, создаваемая каждый новый раз, как вызывается initACCU. Когда обращаемся к AC1.getAccu() ( или AC2.getAccu() ) — по-сути, обращаемся к двум разным методам. Но благодаря тому, что они "обернуты" в два разных объекта, а сами называются одинаково, и создается ощущение, что "Вроде все одинаково, а результаты разные". Но относительно инстансов классов — это все весьма ложные ощущения, которые при серьезной задаче сильно осложнят всё. Лучше использовать по-честному классы. Данный код можно и по-другому написать, кстати: Код AS1/AS2:
Добавлено через 3 минуты Еще вариант, но уже более близкий к классам: Код AS1/AS2:
|
Фукнция возвращаемая из функции, продолжает ссылаться на объект активатор функции (из которой её вернули). В ас2 использовал в делегате + для вызова обработчика с параметрами.
|
Угу... спасибо, буду обдумывать. Буду пробовать твой вариант. Интересно. Почитаю попробую.
Добавлено через 1 минуту Цитата:
Добавлено через 5 минут Цитата:
|
По сути ты сделал класс initACCU.
AS2 классы так и создаются. Компилятор их просто разворачивает в функции типа Код AS1/AS2:
Код AS1/AS2:
|
| Часовой пояс GMT +4, время: 01:13. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.