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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.04.2011, 13:14
jetmg вне форума Посмотреть профиль Отправить личное сообщение для jetmg Найти все сообщения от jetmg
  № 1  
Ответить с цитированием
jetmg

Регистрация: Mar 2011
Сообщений: 11
По умолчанию call/apply и this

Все здравствуйте!!!

Код AS3:
var thisObj = new Object();
thisObj.subProp = new Object();
 
var func  =function(){
this.subProp // явное обращение происходит корректно
subProp // неявное обращение приводит к ошибке
}
func.call(thisObj);
Почему в приведенной организации вызова функции неявное обращение к свойствам объекта, являющегося контекстным, приводит к ошибке.
С этим жить, или я что-то не так понимаю?


Спасибо!!!

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

Регистрация: Sep 2002
Сообщений: 30,784
Потому что subProp ищется во внешней области видимости.

Старый 03.04.2011, 20:01
jetmg вне форума Посмотреть профиль Отправить личное сообщение для jetmg Найти все сообщения от jetmg
  № 3  
Ответить с цитированием
jetmg

Регистрация: Mar 2011
Сообщений: 11
Так не найдя, поиск не продолжается в свойствах this?
Точнее даже первоначально поиск разве не должен идти по собственным свойствам??????
Т.е. другими словами, все обращения к свойствам объекта внутри него же самого нужно производить только через явное this.prop?

Старый 03.04.2011, 20:14
Stargazer вне форума Посмотреть профиль Отправить личное сообщение для Stargazer Найти все сообщения от Stargazer
  № 4  
Ответить с цитированием
Stargazer

Регистрация: Nov 2008
Сообщений: 528
В функциях, являющихся методами класса, this не обязателен (нет разницы). В самостоятельных функциях this нужен (есть разница).

Старый 03.04.2011, 20:22
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
this будет указывать на объект активации. Объектом активации при func.call(thisObj); будет thisObj. При прочих обращениях скоуп будет внешний. Например, во внешнем скоупе будет доступен thisObj и func.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Там фейл еще на этапе компиляции, до рантайма дело не доходит. Или вы как-то это ухитрились скомпилировать?
__________________
Hell is the possibility of sanity

Старый 03.04.2011, 20:48
jetmg вне форума Посмотреть профиль Отправить личное сообщение для jetmg Найти все сообщения от jetmg
  № 7  
Ответить с цитированием
jetmg

Регистрация: Mar 2011
Сообщений: 11
Цитата:
Сообщение от Stargazer Посмотреть сообщение
В функциях, являющихся методами класса, this не обязателен (нет разницы). В самостоятельных функциях this нужен (есть разница).
Благодарю!!!!

Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
this будет указывать на объект активации. Объектом активации при func.call(thisObj); будет thisObj. При прочих обращениях скоуп будет внешний. Например, во внешнем скоупе будет доступен thisObj и func.
Добавлено через 1 минуту
Да, я это понимаю!
Хотел выяснить именно нюанс, осветленный Stargazer.
Спасибо!

Добавлено через 4 минуты
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Там фейл еще на этапе компиляции, до рантайма дело не доходит. Или вы как-то это ухитрились скомпилировать?
Нет! У меня разметка форума Флешем не принимается к компиляции(((

Добавлено через 6 минут
Всем спасибо!


Последний раз редактировалось jetmg; 03.04.2011 в 20:53.
Старый 03.04.2011, 23:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Честно, не знаю о чем вы горорите, у меня этот код, после того, как я поубирал все предупреждения не компилируется потому, что как было сказано выше, еще на этапе компиляции, компилятор не знает куда приткнуть это свойство (т.как на этом этапе еще не извесно где это свойство искать).
Если бы вы смогли обойти компилятор, и все-таки написать аналогичный код (в теории возможно, но смысл от меня ускользает), то возможно остальные рассуждения о том, каким образом такая переменная будет разыскиваться могут оказаться верными или не очень, в зависимости от того, какой именно байткод вы сгенерируете.
__________________
Hell is the possibility of sanity

Старый 04.04.2011, 11:07
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А мне вот это понравилось
Цитата:
Нет! У меня разметка форума Флешем не принимается к компиляции(((
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Цитата:
В функциях, являющихся методами класса, this не обязателен (нет разницы). В самостоятельных функциях this нужен (есть разница).
Иногда есть

Код AS3:
public var data:Object;
public function foo(data:Object):void{
    this.data = data;
}
__________________
ranga

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

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

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


 


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


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