Цитата:
Сообщение от chingachgoog
если хотите разобраться с объектами активации посмотрите посты 408 и 410.
|
Ну давай. Смотрим пост 410, а именно его часть
Цитата:
|
А this указывает на объект активации только в том случае, если функция вложена (тогда this из вложенной функции указывает на объект активации функции-оболочки)
|
привожу следующий код (смотреть с компиляцией под 6-ый плеер)

Код:
cx = 1;
function a () {
}
function b () {
function c () {
ASsetPropFlags (this, null, null, 1);
for (var i in this) {
trace ("\t" + i + " = " + this[i]);
}
}
trace ((cx++) + ".");
a.d = c;
c ();
trace ((cx++) + ".");
a.d ();
}
b ()
new b ();
setTimeout (b, 1000);
он выдает следующее

Код:
1.
c = [type Function]
arguments =
this = _level0
2.
d = [type Function]
prototype = [object Object]
__proto__ = [object Object]
constructor = [type Function]
3.
c = [type Function]
super = [object Object]
arguments =
this = [object Object]
4.
d = [type Function]
prototype = [object Object]
__proto__ = [object Object]
constructor = [type Function]
5.
c = [type Function]
super = [type Function]
arguments =
this =
6.
d = [type Function]
prototype = [object Object]
__proto__ = [object Object]
constructor = [type Function]
Особенно интересен пункт 5. Функция вложена, this есть и должен указывать на объект активации, а он показывает undefined (хотя там пустота, надо помнить, что в 6-ом плеере undefined не выводится в трейс, если в трейсе есть еще что-то). То есть, свойства объекта активации есть, а самого объекта нет! Это и доказывает, что this не ссылается на объект активации, о чем было заявлено в посте 410.
Дополнение, наткнулся на
пост в блоге Нокса. Там он цитирует спецификацию ECMA-262
Цитата:
The activation object is purely a specification mechanism. It is impossible for ECMAscript program to access the activation object. It can access members of the activation object, but not the activation object itself.
Объект активации функции - это внутренний механизм спецификации. Программа на ECMA-скрипте не может получить доступ к объекту активации функции, но может получить доступ к его свойствам. К свойствам, но не к самому объекту активации.
|