Показать сообщение отдельно
Старый 01.07.2008, 18:35
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 415  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
По поводу "объекта активации", областей видимости:
Код:
var e = 5;
function Class2(){
	this.e=0;
	trace(e); //5  //-видит, при создании экземпляра область 
//видимости не поменялась как пишет __etc
	trace(this.e); //0 // е в объекте, this - указатель на объект.
//можете считать, что с созданием экземпляра, область
//видимости "расширилась", вопрос терминологии...
	
}
var o2 = new Class2();
Тоже происходит и с локальными функциями. Все они видят, и указатель this - здесь не причем.
Меня сбил с толку код wvxvw:
Код:
//wvxvw пишет про область видимости
function TClass () {
	//пытается скрестить строку с this - не вышло
	//+ внутри this указывает на другое
	function toBePrivate () { trace("Should be TClass: "+ this); }//так нельзя
	this.toString = function () { return "[TClass]" };
	this.callPrivateMethod = function() {toBePrivate()};
}
var t = new TClass();
trace(t);//[TClass]
t.callPrivateMethod(); //Should be TClass: undefined
Правильно вот так:
Код:
function TClass () {
	function toBePrivate () { 
	this.toString = function () { return "[TClass Function]" };
	trace(this); //вот так можно, только this, без строк
	};
	this.toString = function () { return "[TClass]" };
	this.callPrivateMethod = function() {toBePrivate()};
}
var t = new TClass();
trace(t);//[TClass]
t.callPrivateMethod();//[TClass Function]
2 iNils:По этому, речь идет только о глобальных функциях (this==undefined), а в методах - все OK.
Я прокоментирую:
Код:
function a () {
	trace (this); 
}
function b(){
	trace (this); 
	a();//не знаю... Очевидно что функция a не относится к объекту класса b(),
	//это только ссылка на внешнюю функцию, которая лежит на 
//таймлайне (_level0)
//Я уже писал, что все что находится вне тела класса - не копируется 
//при создании экземпляра, а получает ссылку ...
}
new b(); // создается экземпляр класса b()
Подкорректируем...
Код:
function b(){
	function a(){trace (this); }
	trace (this);//[object Object] - указатель 
//на экземпляр класса
	a(); //[type Object] - указатель на объект функции (b),
//я уже писал про это ...
}
new b();
По поводу области видимости экземпляра:
2 __etc:
Вы показали как работает указатель this в AS1. И что? Не надо их сравнивать (AS1, AS3);
Код:
o = new Object();
o.toString = function() {
	return 'object o';
}
a = new Object();
a.toString = function() {
	return 'object a';
}
function test() {
	trace(this);
}
o.test = test;
a.test = test;
test(); // _level0
o.test(); // object o
a.test(); // object a
trace([test==o.test, test==a.test]); // true,true
Цитата:
Сообщение от =__etc
В AS3 поведение иное, область видимости не изменяется, даже если присвоить ссылку на метод класса другому объекту. А в AS1/AS2 функция будет вызвана в области видимости того объекта, к которому она присвоена
Где у вас здесь методы класса? если бы test() - был методом класса, он бы и работал, как "спрогаммирован". То есть instanceOfClass.test() - будет возвращать, то что нужно. И не важно кому его присвоят, откуда он ссылку получит.

Вы наверно не заметли.., а процитировали только мое одно предложение, я процитирую:
Цитата:
Сообщение от riden
Это значит, что все переменные (свойства) во внешней функции (классе) видны. Все свойства внутри тела класса (функции) копируются, с созданием экземпляра. И можно также (как и в AS3, например this[область видимости экземпляра]-parent) через ссылку на this-класса, получить доступ к руту экземпляра.
Аналогом parent DisplayObject в AS1 будет _parent мувика. Короче классы в ас1 работают также как в ас3 в этом смысле. И также можно узнать где лежит клип: this-класса._parent, и таким образом получить доступ к области видимости экземпляра. Надеюсь я правильно понял смысл фразы "область видимости экземпляра класса". А как в АС3 вы получите из тела класса, доступ к области видимости экземпляра, если он - не часть DisplayList (короче не DisplayObject)? Ну не важно, аналогию я привел.
__________________
видеоигры - высший вид искусства