Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.01.2008, 11:40
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 1  
Ответить с цитированием
aQuestion
Banned
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
Question насчёт запоминания this

Код:
var F:Function = function () {
	this.f = function () {
		trace (this);
	};
	this.toString = function () {
		return "hello";
	};
};
var o:Object = new F (); o.f ();
пишет hello
Код:
function G ():Function {
	var F:Function = function () {
		this.f = function () {
			trace (this);
		};
		this.toString = function () {
			return "hello";
		};
	};
	var o:Object = new F ();
	return o.f;
}; G () ();
пишет [object global]

Код:
function G ():Function {
	var F:Function = function () {
		this.f = function () {
			trace (this);
		};
		this.toString = function () {
			return "hello";
		};
	};
	var o:Object = new F ();
	return o.f;
}; var z:Function = G (); z ();
пишет [object MainTimeline]

Почему?

Старый 14.01.2008, 11:47
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 2  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Код:
return o.f();

Старый 14.01.2008, 11:50
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 3  
Ответить с цитированием
aQuestion
Banned
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
так как o.f () ничего не возвращает, то в твоей редакции будет андефайнед. вопрос, собственно, не в том. я так понял, this с функцией в AS3 никогда не расстаётся, в свете чего вышеприведенный аутпут непонятен

Старый 14.01.2008, 11:55
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 4  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Возвращает или нет, но функцию вызывают со скобками в конце!!!

Старый 14.01.2008, 12:37
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 5  
Ответить с цитированием
aQuestion
Banned
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
я чет не понял, что ты хочешь этим сказать. а я вот хочу написать БЕЗ скобок. компилер не против, рантайм не против, а вот человек завтрашнего дня почему-то против.

Старый 14.01.2008, 13:03
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 6  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Цитата:
Сообщение от aQuestion
я чет не понял, что ты хочешь этим сказать. а я вот хочу написать БЕЗ скобок. компилер не против, рантайм не против, а вот человек завтрашнего дня почему-то против.


Код:
function G ():Function {
	var F:Function = function () {
		this.f = function () {
			trace (this);
		};
		this.toString = function () {
			return "hello";
		};
	};
	var o:Object = new F ();
	return o.f;
}; var z:Function = G (); z ();
грубо говоря z = o.f, т.е.:
Код:
z = function()
{
	trace (this);
}
Типа так...


Последний раз редактировалось 2morrowMan; 14.01.2008 в 13:05.
Старый 14.01.2008, 13:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
2morrowMan, вы снова не в теме со своими скобками.

aQuestion, в первом случае все понятно? Создали объект типа Function, у него есть функция f, область видимости ссылается на этот объект.

Во втором случае возвращается ссылка на функцию, которая по факту становится анонимной, т.к. объект, к которому она была привязана, был удален (он же локальный внутри функции). Функция существует, объект — нет.

В третьем случае это особенности работы Flash CS3, z — поле класса MainTimeline, z ссылается на функцию, которая сама по себе анонимная, но т.к. z принадлежит классу, то область видимости внутри функции будет ссылаться на класс.


Последний раз редактировалось etc; 14.01.2008 в 13:07.
Старый 14.01.2008, 13:24
aQuestion вне форума Посмотреть профиль Найти все сообщения от aQuestion
  № 8  
Ответить с цитированием
aQuestion
Banned
 
Аватар для aQuestion

Регистрация: Dec 2005
Сообщений: 556
Цитата:
Сообщение от __etc
функцию, которая по факту становится анонимной, т.к. объект, к которому она была привязана, был удален (он же локальный внутри функции). Функция существует, объект — нет.
Код:
var F:Function = function () {
	this.f = function () {
		trace (this);
	};
	this.toString = function () {
		return "hello";
	};
};
var o:Object = new F ();
var z:Function = o.f; z ();
по прежнему пишет [object MainTimeline], хотя объект о никуда не девается. внутри функции это безобразие выдаёт [object global], т.е. функция тупо отваливается от объекта на этапе взятия o.f.

Старый 14.01.2008, 13:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от aQuestion
Код:
var F:Function = function () {
	this.f = function () {
		trace (this);
	};
	this.toString = function () {
		return "hello";
	};
};
var o:Object = new F ();
var z:Function = o.f; z ();
по прежнему пишет [object MainTimeline], хотя объект о никуда не девается. внутри функции это безобразие выдаёт [object global], т.е. функция тупо отваливается от объекта на этапе взятия o.f.
Не отваливается:
Код:
var o:Object = new Object();
o.f = function():void {
	trace(this);
}
o.toString = function():String {
	return "o";	
}
var a:Object = new Object();
a.toString = function():String {
	return "a";	
}
a.f = o.f;
o.f();
a.f();
Для таких объектов области видимости меняются, как в AS2.

Старый 14.01.2008, 13:16
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
function G():Function {
	var F:Function = function() {
		this.f = function() {
		trace(this);
		};
		this.toString = function() {
		return "hello";
		};
	};
	var o:Object = new F();
	return o.f;
}
var obj:Object = {toString:function(){return 'hello again!'}};
G().apply(obj);
Очевидно по той же причине, по которой у arguments нету больше свойства caller - this в функции находится динамически, а не является каким-то ее параметром.
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:10.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.