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

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от Ромастый
В AS1 методы создавались через prototype
Ложь. prototype нужен только лишь для организации наследования, как
Код:
Class.prototype = new SuperClass();
В остальном prototype может использоватся как ссылка, для того что бы НА ЭТАПЕ ИСПОЛНЕНИЯ СОЗДАТЬ НОВОЕ СВОЙСТВО (так и делает wvxvw)
Не вижу ни какой сязи с prototype и созданием свойств (методов) вне конструктора (тела класса). Я уже приводил код, как это делается в теле класса.
2Ромастый... если вы не видели мой код, создание свойств и методов делается так в АС1, в теле класса:
Код:
var бла бла // приват свойство
функция(){одна одинешенька, на меня никто не ссилается} //приват метод
this.свойство = бла-бла // паблик свойство
this.свойство = функция //паблик метод
Цитата:
Сообщение от Ромастый
Вот только function AS1Class() {..} является не телом класса, а конструктором
Функция AS1 - это и конструктор и тело класса одновременно.

Цитата:
Сообщение от wvxvw
курим мануал. ответ простой: нет. указатель на объект активации - argumetns.caller
Еще раз приведу свой код:
Код:
function Class1(){
this.a=1;
	trace (this); //[object Object]
	function localFunc(){
		this.b=2
		trace(this);//this получает ссылку в момент создания экземпляра
					//Выводит [type Object]
		trace(this.a); //undefined
		trace(this.b); //2
	}
	localFunc();
	//this.met = localFunc;
}
//Class1();
var c = new Class1();
//c.met();
/*Выводит:
[object Object] - ссылка на объект с
[type Object] - ссылка на localFunc() (я так думаю)
undefined - нет такого свойства в объекте
2
*/
Как вы видите, у каждой функции свой this.
И еще про область видимости. Вашим тупым аргументом является, то что this вызванное из функции без объекта активации, возвращает undefined. Вы применяете обман, и утверждаете что функция не видит "выше" (выше-вложенной функции, то есть функции-тела ласса). Так то что функция все видит, убедится очень легко... процитирую свой код...
Код:
......................
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}
..................
Как видите переменная pa - видна в приватном методе, да и будет видна в паблик методе. По этому не понятны притензии, якобы не видит верхний this... Не видит потому что у каждой функции свой this в AS1, и вы сразу получаете указатель на другой объект, а вот в AS3 у функции нет this, поэтому и возможно обращение к классу из функции

Цитата:
Сообщение от wvxvw
>> В AS3 функции имеют более узкое назначение и применение

ложь =)
Попробуйте, в AS3, создать экземпляр функции, с помощью оператора new и увидите что будет

Цитата:
Сообщение от wvxvw
>> Ну и почему методы созданные на этапе исполнения(то есть когда создаются экземпляры классов) (пускай даже на временной диаграме) должны иметь доступ к приват-свойствам класса?

Это является обязательным атрибутом метода, иначе это не метод.

>> вне тела класса.

Вы путаете конструктор класса и сам класс.
Добавте таким же образом метод в динамический класс в АС3 - это называтся НА ЭТАПЕ ИСПОЛНЕНИЯ - и попытйтесь обратится к приватным свойствам класса, в который вы добавляете
Или у вас такой малый опыт програмирования, или что.. не знаю, что вы не можете провести аналогии между AS1 и AS3... Или на временной диаграме вы это зделаете, или в теле другого класса, к приват вы уже не имеете никакого отношения... Или вы напрочь забыли для чего приват свойста?
Функция в AS1, которая имеет объект активации в виде объекта инициализированного оператором new, и есть класс, так как с этого момента (new) this данной функции будет ссылатся на объект активации, на каждый экземпляр и заполнять пустой объект свойствами this."свойство".

Вот код, и апровержения я так и не увидел. Приватный метод pMetA(). Удачи
Код:
function Class1(){
//паблик свойство
this.a = 4;
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}

//паблик методы
function pmet1(){pMetA();}
function pmet2(){trace("do pmet2");}
this.met1=pmet1;//паблик метод
this.met2=pmet2; //паблик метод

}
////////////////////////////////////////
var obj = new Class1();
var obj1 = new Class1();

trace(obj.a);//4
obj.met1();
trace(obj.a);//10
trace(obj1.a);//4
obj1.met1();
trace(obj1.a);//10
Надоело разжовывать элементарные вещи,... удачи


Последний раз редактировалось riden; 30.06.2008 в 15:20.