Цитата:
|
Сообщение от Ромастый
В 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
Надоело разжовывать элементарные вещи,... удачи
