Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   onEnterFrame: delete vs null (http://www.flasher.ru/forum/showthread.php?t=112593)

TanaTiX 02.06.2008 19:32

onEnterFrame: delete vs null
 
Код:

this.onEnterFrame=null;
delete this.onEnterFrame;

Две нижеприведенные строчки казалось бы выполняют одно и тоже. По крайней мере мне так какзлось до определенного момента. Хотелось бы услышать про отличия в их работе, когда какой из вариантов следует использовать. У меня почему-то в некоторых случаях работает только 1й вариант (могу привести конкретные примеры, но хотелось бы понять суть их работы, поэтому я пока послушаю теорию, и если не осилю - буду упрощать свою задачу и предлагать конкретный код)
Заранее спасибо.

Alex_beginner 02.06.2008 19:40

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

TanaTiX 02.06.2008 19:48

Т.е. в 1с варианте сама функция onEnterFrame не исчезает? Т.е функция продолжает работать, возвращая "ничего"? Тогда есть ли смысл в такой конструкции?

Alex_beginner 02.06.2008 20:09

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

Код:

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


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

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

TanaTiX 02.06.2008 21:09

Alex_beginner, спасибо за исчерпывающий ответ.

silin 02.06.2008 23:08

Alex_beginner, инициализации при объявлении вовсе необязательна, достаточно и var myProp:Number;
кстати, поправь свой пример, объявить свойство класса как this.myProp:Number = null; никак не выйдет

ps: onEnterFrame не нуждается ни в инициализации, ни даже в объявлении поскольку речь все же о наследниках MovieClip,
т.е. такой класс, например, не вызовет ошибки:
Код:

class MyClass extends MovieClip
{
        public function MyClass(myEnterFrame:Function)
        {
                onEnterFrame = myEnterFrame;
        }
}


etc 02.06.2008 23:12

Несколько раз обсуждалось это. Использовать нужно delete.

Alex_beginner 03.06.2008 10:16

silin! Красивый реверанс)). Вы не забывайте Вы создали подкласс от MovieClip, в нем инициализирован этот метод(onEnterFrame). А здесь Вы его просто переопределяете. Пожалуйста, мою мысль некаверкайте и людей с толку несбивайте.

chingachgoog 03.06.2008 11:34

Код:

onEnterFrame=null

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

delete onEnterFrame

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


silin 03.06.2008 12:17

Цитата:

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

сори, не имел намерения каверкать Вашу мысль, а только уточнить некоторые нюансы с инициализацией:
-инициализация при объявлении не нужна, а в некоторых случаях и вредна (инициализация непримитивных типов в AS2 приводит к неприятному косяку)
-поскольку вопрос был об onEnterFrame, то логично и говорить об наследниках MovieClip, у которых onEnterFrame уже есть (какой смысл в "прединициализации" в этом контексте не очень понятно)
-onEnterFrame в MovieClip не инициализирован (undefined), а только объявлен, но этого достаточно

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


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

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