Цитата:
|
Сообщение от __etc
riden просто до сих пор не знает, как использовать call и apply, поэтому начинает нести пургу относительно this, то рассказывая про то, что он суть arguments.caller, то соглашался, что это ссылка на область видимости, теперь опять arguments.caller.
|
Никогда такого не говорил. Объект активации, область видимости... называйте как угодно... this - это указатель на объект активации функции, я уже приводил код. Если вы не понимаете сути this, и кокое он имеет отношение к функции, ваши проблемы. Я уже приводил код... тогда еще раз...

Код:
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
*/
Цитата:
|
Чего и следовало ожидать, как и riden-а, вывалился стандартный костыль в виде ссылки на самого себя и функция так и осталась локальной функцией и не работает, как метод.
|
Мы кажется говорим про приватный метод. Что за бред: "функция не работает как метод"? Приватный метод - тоже что и локальная функция.
А если хотитие чтобы функция работала как метод, то надо сделать вот так: this.свойство = функция.
Цитата:
|
Сообщение от wvxvw
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.
|
Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.
Еще раз, почему
функция в AS1 - это и конструктор и
тело класса...
Во первых, потому что:
Цитата:
|
Сообщение от riden
Функция в AS1, которая имеет объект активации в виде объекта инициализированного оператором new, и есть класс, так как с этого момента (new) this данной функции будет ссылатся на объект активации, на каждый экземпляр и заполнять пустой объект свойствами this."свойство".
|
Во вторых: Так как все что находится в теле функции-класса, реально копируется при создании экземпляра, а вот все что снаружи - всего лишь получает ссылку. Убедится в этом очень просто:

Код:
function func1(){}; // Создаем внешнюю функцию
func1.prop2=1; // Присваиваем функции свойство
function Class1(){ // Функция-класс
function func2(){}; // Создаем внутреннюю функцию
func2.prop=1; // Присваиваем внутренней функции свойство
this.method1=func1; // Создаем методы, ссылаясь на внутреннюю
this.method2=func2; // и внешнюю функции
}
var obj1=new Class1(); // Создаем два объекта класса Class
var obj2=new Class1();
obj1.method1.prop=2; // Переопределяем свойства функций методов
// одного из объектов
//obj1.method2.prop=2;
trace(obj2.method1.prop); // Выводит: 2 (свойство было изменено)
trace(obj2.method2.prop); // Выводит: 1 (свойство осталось неизменным)
2 __etc (#370): мы говорим сейчас про реализацию приват и паблик, не отступайте от темы... или признайте, что вы не правы.