Форум 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=211218)

hebep1982 14.07.2015 09:09

Использование функций для создания объектов.
 
Есть всем известная книга Колина Мука глава 15 страница 339-400 где описан способ который я часто использовал в AS2 но у меня он не работает в AS3. Я что-то не понимаю?

Код AS3:

function Employee(age){
 
 this.age=age;
}
 
var worker=new Employee(17);


ZackMercury 14.07.2015 09:19

this обращается к текущему экземпляру, а не к функции.
Такой синтаксис нетипичен для объектно-ориентированного языка.

Код AS3:

trace(this.parent);
trace(this);

Этот код везде будет работать одинаково.
Можно сделать так

Код AS3:

var obj:Object = new Object();
obj.age = 17;

или так

Код AS3:

var obj:Object = new Object();
obj["age"] = 17;

или так

Код AS3:

var obj:Object = { age:17 };

Но в AS3 объекты не используются, как объекты, а как нетипизированные ассоциативные массивы.
Объекты в AS3 - это экземпляры классов.

hebep1982 14.07.2015 09:21

Да это я знаю. Не работает именно сам способ:

Код AS3:

function Employee(){
 
}
 
var worker=new Employee();

Флеш пишет -> 1048: Метод не может использоваться как конструктор.

ZackMercury 14.07.2015 09:24

function определяет объект класса Function, экземпляр уже определённой функции нельзя создать.
Можно создать экземпляр функции вот так, но это не имеет ничего общего с вашими потребностями.
Код AS3:

var func:Function = new Function("...");

В чём логика?
Вы объявляете функцию, и пытаетесь создать объект с помощью функции.
Естесственно, эту ерунду убрали, и дали более удобную работу с объектами в виде классов.

callme 14.07.2015 09:29

Код AS3:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            var worker:Object = new Employee(17);
            trace(worker.age);
        }
    }
}
 
// Функция должна быть размещена за пределами package.
// У Мука про это написано в самом начале.
function Employee(age:Object):Object
{
    this.age = age;
    return this;
}


hebep1982 14.07.2015 09:53

Спасибо callme. Теперь ясно в каком контексте это имелось ввиду.


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

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