![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
Привет,
все выходные я много думал об ООП и судьбе России. Меня смущает область видимости аргументов метода. function CompareFunction () {} arrayName.sort (CompareFunction); CompareFunction не свойство arrayName, почему же оно попадает в область действия метода?? Последний раз редактировалось dm_nev; 19.04.2004 в 10:42. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
не попадает.
ну, в том виде, в котором ты думаешь (становлюсь телепатом) в теле функции его нет но есть в мувике, в котором ты его написал. то же самое записать можно так: this.CompareFunction = function () {} arrayName.sort (this.CompareFunction); - так все встало на свои места? |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
интереснее вот такая конструкция:
this.insideTest = function() { var bla = 0; this.test = function() { trace(++bla); }; }; this.insideTest() this.onMouseUp = function() { this.test() }; |
|
|||||
|
Регистрация: Jul 2003
Адрес: Петербург
Сообщений: 432
|
О, спасибо за интересные примеры. Почему работает последний я все-таки еще не вник.
А что касается моего, то получается, что Compare действительно сначала ищется в свойствах Array, потом еще где-то, потом в _root, а потом в Object.prototype, верно? Я бредово объясняю, но у Мук эту тему не очень подробно затрагивает. ваще флуд получился, ты на этот раз понимаешь что я хотел сказать? |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
область видимости и наследование. вот о чем речь собственно.
более того, многие авторы достаточно серьезных книг таки не воткнулись в тему. например на мои вопросы к дебройлу с этим примером он ответил, что это наверное баг хотя это не так. объяснение такое: 1) любой объект, а также его наследники, суть вещь безымянная и всего лишь область памяти. Кстати и мувиклип тоже. 2) объект нельзя удалить напрямую. типа delete my_object - таким образом мы удаляем лишь ссылку на него. но не сам объект. 3) объект может быть удален ТОЛЬКО сборщиком мусора, если на него не осталось ссылок. других вариантов нет. - как это влияет на то, что мой пример работает? - при вызове функции создается временный объект, который как минимум является наследником Object, в именном пространстве которого и хранятся все временные (var) переменные. Этот временный объект удаляется по окончании работы функции. НО как мы выяснили право удалять имеет только сборщик мусора. и у нас осталась функция, которая имеет ссылку на переменную, находящуюся в этом объекте. соответственно у переменной осталась ссылка на объект-родитель и этот родитель не будет удален сборщиком мусора - ссылочка-то вот она! Поэтому переменная не обнуляется. - все работает правильно. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
Цитата:
Это заблуждение. Создай Compare в этом массиве и увидищь, что обращения к нему не будет. Если отсутствует явное указание пути к объекту, то флэш ищет в следующем порядке: - в текущем мувиклипе - в прототипе MovieClip - в прототипе Object - в _global - вызывается функция __resolve |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
года полтора назад, помнится, мы тут с john'ом ломали копья, было совершенно не понятно с какой радости можно поменять временные переменные, являвшиеся аргументами функции, уже ПОСЛЕ того как эта функция завершила работу :)
и колин мук, кстати, это дело объясняет. сам видел :) при вызове функции создаётся пространство имён, которое убивается только сборщиком мусора, который работает непонятно по какому принципу. я вот не нашел документации никакой по этому делу... может в СДК к плееру есть что-то ? не смотрел. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
а чего копья ломать? я ж все объяснил
![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
не хотел тебя огорчать, но это было объяснено на заре выхода шестёрки :)) в пятёрке как-то не наступалось на эти грабли...
странно, что дебройль не воткнул чего-то.. я думаю он тебя вообще не понял :) |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
дык. тогда и нашли объяснение. просто не здесь эта тема шоркалась. на руфлэш.
|
![]() |
Часовой пояс GMT +4, время: 08:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|