Показать сообщение отдельно
Старый 02.07.2008, 16:38
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 432  
Ответить с цитированием
chingachgoog
Banned
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от iNils Посмотреть сообщение
Ну давай.
...
привожу следующий код (смотреть с компиляцией под 6-ый плеер)
Это изначальная ошибка. Дело не в компиляции под 6-й плеер, а в наличии самого 6-го плеера. Просто, начиная с 7-го ФП объект активации перевели на быстрые регистры и он стал практически недоступен (по крайней мере для for in с ASsetPropFlags). Разумеется это было сделано не для того чтобы "прикрыть лавочку" или "не повадно было".
Т.е. если ты хочешь протестить свой код, то найди 6-й флеш-редактор (тот что MX) и протести там.

Цитата:
Сообщение от iNils Посмотреть сообщение
Объект активации функции - это внутренний механизм спецификации. Программа на ECMA-скрипте не может получить доступ к объекту активации функции, но может получить доступ к его свойствам. К свойствам, но не к самому объекту активации.
Вообще можно, в том же ФП6. Достаточно дать ссылку на объект активации и он будет жить вечно

add:
Код:
function b () {
	function c () {
		trace(this)
		z=this
	}
	c ();
}
b ()
trace(z)

ASsetPropFlags (z, null, null, 1);
		for (var i in z) {
			trace ("\t" + i + " = " + z[i]);
		}
Получаем:

Код:
[type Object]
[type Object]
	c = [type Function]
	arguments = 
	this = _level0
И ничего удивительного тут нет. Реальный this функции "с" показывает, как и ожидается на объект активации функции "b".
А этот объект активации (функции "b", а не "с"!) содержит в себе указатель this, куда? Правильно, на рут - тот объект, чьим методом является функция "b".


Последний раз редактировалось chingachgoog; 02.07.2008 в 17:33.