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

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

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

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
По умолчанию onEnterFrame: delete vs null

Код:
this.onEnterFrame=null;
delete this.onEnterFrame;
Две нижеприведенные строчки казалось бы выполняют одно и тоже. По крайней мере мне так какзлось до определенного момента. Хотелось бы услышать про отличия в их работе, когда какой из вариантов следует использовать. У меня почему-то в некоторых случаях работает только 1й вариант (могу привести конкретные примеры, но хотелось бы понять суть их работы, поэтому я пока послушаю теорию, и если не осилю - буду упрощать свою задачу и предлагать конкретный код)
Заранее спасибо.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: May 2008
Сообщений: 476
Ну насколько известно первая строчка инициализирует метод-событие текущей временной шкалы, но не присваивает ему конкретной инстанции.
Вторая строчка предназначена для полного удаления метода-события.
Вообще то эти две строчки совсем разные.
__________________
Случайность, господа, это знаете ли непознанная необходимость.

Старый 02.06.2008, 19:48
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 3  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Т.е. в 1с варианте сама функция onEnterFrame не исчезает? Т.е функция продолжает работать, возвращая "ничего"? Тогда есть ли смысл в такой конструкции?
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

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

Регистрация: May 2008
Сообщений: 476
В такой конструкции вообщем-то смысла нет, а вот в прединициализации свойств есть. Вот например в классе для присваивания свойству не динамического класса, необходимо предварительно инициализировать свойство, т.е.

Код:
class MyClass
{
      private var myProp:Number = null;
      function MyClass(myProp:Number)
        {
               this.myProp = myProp;//конструктор класса
        }
}

Так вот если не выполнить прединициализацию свойства myProp компилятор выдаст ошибку.

А вообще-то null означает "пустое" значение. Оно нужно если мы нехотим передавать никакое значение значение параметра в функцию. Или, допустим в какой-то момент мы незнаем значение переменной, но в данном конкретном месте ее прединициализация целесообразна из соображений контроля типов, ну и тд.
Однозначно пользуйтесь delete


Последний раз редактировалось Alex_beginner; 03.06.2008 в 10:54.
Старый 02.06.2008, 21:09
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 5  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Alex_beginner, спасибо за исчерпывающий ответ.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 02.06.2008, 23:08
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Alex_beginner, инициализации при объявлении вовсе необязательна, достаточно и var myProp:Number;
кстати, поправь свой пример, объявить свойство класса как this.myProp:Number = null; никак не выйдет

ps: onEnterFrame не нуждается ни в инициализации, ни даже в объявлении поскольку речь все же о наследниках MovieClip,
т.е. такой класс, например, не вызовет ошибки:
Код:
class MyClass extends MovieClip
{
	public function MyClass(myEnterFrame:Function) 
	{
		onEnterFrame = myEnterFrame;
	}
}

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

Регистрация: Sep 2002
Сообщений: 30,787
Несколько раз обсуждалось это. Использовать нужно delete.

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

Регистрация: May 2008
Сообщений: 476
silin! Красивый реверанс)). Вы не забывайте Вы создали подкласс от MovieClip, в нем инициализирован этот метод(onEnterFrame). А здесь Вы его просто переопределяете. Пожалуйста, мою мысль некаверкайте и людей с толку несбивайте.
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 03.06.2008 в 10:19.
Старый 03.06.2008, 11:34
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 9  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Код:
onEnterFrame=null

trace(hasOwnProperty("onEnterFrame")) // true

delete onEnterFrame

trace(hasOwnProperty("onEnterFrame")) // false

Старый 03.06.2008, 12:17
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от Alex_beginner Посмотреть сообщение
silin! Красивый реверанс)). Вы не забывайте Вы создали подкласс от MovieClip, в нем инициализирован этот метод(onEnterFrame). А здесь Вы его просто переопределяете. Пожалуйста, мою мысль некаверкайте и людей с толку несбивайте.
сори, не имел намерения каверкать Вашу мысль, а только уточнить некоторые нюансы с инициализацией:
-инициализация при объявлении не нужна, а в некоторых случаях и вредна (инициализация непримитивных типов в AS2 приводит к неприятному косяку)
-поскольку вопрос был об onEnterFrame, то логично и говорить об наследниках MovieClip, у которых onEnterFrame уже есть (какой смысл в "прединициализации" в этом контексте не очень понятно)
-onEnterFrame в MovieClip не инициализирован (undefined), а только объявлен, но этого достаточно

ps. дискутировать не стану, нечего обсуждать

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

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

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


 


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


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