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

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от __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): мы говорим сейчас про реализацию приват и паблик, не отступайте от темы... или признайте, что вы не правы.
__________________
видеоигры - высший вид искусства


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