Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Кстати, о конструкциях... Читал хабрарабр. Наткнулся на такое (http://www.flasher.ru/forum/showthread.php?t=122122)

dimarik 03.03.2009 01:28

Кстати, о конструкциях... Читал хабрарабр. Наткнулся на такое
 
Кстати, о конструкциях... Читал башорг хабрарабр. Нактнулся на такое
Код AS1/AS2:

TestClass(this).property = value;

Для заинтересовавшихся. Да так и не понял, как это работает.

UPD: "Такой прием во многих случаях может сократить объем кода и убрать негативный оттенок асинхронности". Очень понравилось.

UPD_1: Изучая комменты хабралюдей, увидел: "Функцию-то описать можно, но этот код не скомпилируется в том виде, в каком вы его привели, т.к. отсутствует конструктор, принимающий параметр. Будет сгенерирован по дефолту пустой конструктор, который не принимает аргументов, и при попытке туда что-то передать вылезет ошибка.
Я допускаю, что наличие правильного конструктора подразумевается, но это не для всех очевидно, некоторых читателей вы вводите в заблуждение".
Факт 1. Чувак вводит нас в заблуждение.

UPD_2. Чорт. Я не могу читать следующие комменты! Все слишком банально: "По-поводу TestClass, зачем так конструктор? Он не нужен, в примере использования ничего в класс не передаётся".

А кто объяснит UFO: "TestClass(this).property = value;"?

DarkLight 03.03.2009 02:26

Это шедевр просто. Кастинг самого в себя. Безопасность кода чуть менее чем плохая, никакой смысловой нагрузки я тут не вижу. Ощущение, что человек путает as2 с as3.

Gaen 03.03.2009 02:35

Это я писал про конструктор. Прочитав пост DarkLight, я понял что я идиот, ибо проглядел отсутствие new и спутал кастинг с созданием экземпляра :)

dimarik 03.03.2009 02:39

Друзья, но кто объяснит таки конструкцию
Код AS1/AS2:

TestClass(this).property = value;

Кастинг, это клева!

Dima_DPE 03.03.2009 02:39

TestClass(this) - это приведение типов, аля this as TestClass, но немного не то, гуру меня поправят, да и как сказал DarkLight это реально шедевр, а вообще статья довольно холиварная, что легко заметить в коментах в оригинале.

Код AS3:

TestClass(this).property = value;
//то же
(this as TestClass).property = value;
// в данном контексте, то же
this.property = value;
// или вообще
property = value;


Gaen 03.03.2009 02:47

Сейчас какраз говорим об этом с автором:
http://habrahabr.ru/blogs/flex/52458/#comment_1419237

wvxvw 03.03.2009 02:58

Кстати, для любителей подобных шедевров с легким налетом идиотизма... :)
http://www.actionscript.org/forums/s...=179053&page=3

Gaen 03.03.2009 03:03

Код AS3:

Function.prototype.curry = function(...rest){
  var method = this;
  return function(...args){
    return method.apply(this,rest.concat(args));
  };
};

Убило :)

Похоже вызывается это так:
Код AS3:

someFunction.curry(1, 2)(3, 4);


DarkLight 03.03.2009 03:05

Хм, в случае того поста на хабре это будет паттерн "параноик". Ни один метод класса ни в чем не должен быть уверен:) Основным применением является защита от копипаста кода из одного класса в другой:)

Котяра 03.03.2009 11:26

Интересно стало. потестил:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author k0t0vich (c) 2009 b_konstantin@list.ru http://islandsworld.ru/
        */

        public class Main extends Sprite
        {
                private var _value:int = 3
                public var func1:Function = new Paranoik().getValue;
                public var func2:Function = new Simple().getValue;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        trace (func1());
                        trace(func2());
 
                }
 
 
 
        }
 
}

Код AS3:

package  
{
 
        /**
        * ...
        * @author k0t0vich (c) 2009 b_konstantin@list.ru http://islandsworld.ru/
        */

        public class Paranoik
        {
                private var _value:int = 1;
 
                public function Paranoik()
                {
 
                }
 
                public function getValue():int
                {
                        return Paranoik(this)._value;
                }
 
        }
 
}

Код AS3:

package  
{
 
        /**
        * ...
        * @author k0t0vich (c) 2009 b_konstantin@list.ru http://islandsworld.ru/
        */

        public class Simple
        {
                private var _value:int = 2;
 
                public function Simple()
                {
 
                }
 
                public function getValue():int
                {
                        return _value;
                }
 
        }
 
}

По идее автора конструкции func2 не должна выдавать _value класса Simple, т.е. 2, а делегироваться на получение Main._value, чего конечно же не происходит.
зачем тогда: Paranoik(this)._value ?


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

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