Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Array() can also be invoked as a function. (http://www.flasher.ru/forum/showthread.php?t=137848)

XDiaBLo 23.03.2010 21:42

Array() can also be invoked as a function.
 
Наткнулся на такое в документации:
Цитата:

Array() can also be invoked as a function.
Но как? Это же конструктор, как такое возможно и зачем? Полистал саму доку http://help.adobe.com/en_US/AS3LCR/F...0.0/Array.html, но так и не нашёл более подробной информации.
Благодарю за ответы.

wvxvw 24.03.2010 01:06

1. Конструктор все-равно формально функция.
2. Array и Object изза своей ECMA-специфики (ну это мягко сказано) не являются классами в полном смысле этого слова. Т.е. они такие же классы, как и AS2 классы. Для Яваскрипта это наверное удобно, но для AS3 оно скорее вредно и непонятно зачем. Я просто стараюсь избегать Array(param) / new Array(), равно как и Object(param) / new Object(). На мой взгляд это скорее артефакт совместимости с ECMA чем что либо другое.

AL.exe 24.03.2010 03:15

Цитата:

Но как? Это же конструктор, как такое возможно и зачем?
Имелось ввиду вот это: http://help.adobe.com/en_US/AS3LCR/F...ml#Array%28%29

Есть конструктор класса Array:
Код AS3:

var fubar:Array = new Array();

А есть top-level функция с названием Array:
Код AS3:

var fubar:Array = Array();


Это просто в дополнение к ответу wvxvw, если вдруг непонятно :)

XDiaBLo 24.03.2010 18:21

Цитата:

Сообщение от wvxvw (Сообщение 895220)
1. Конструктор все-равно формально функция.
2. Array и Object изза своей ECMA-специфики (ну это мягко сказано) не являются классами в полном смысле этого слова. Т.е. они такие же классы, как и AS2 классы. Для Яваскрипта это наверное удобно, но для AS3 оно скорее вредно и непонятно зачем. Я просто стараюсь избегать Array(param) / new Array(), равно как и Object(param) / new Object(). На мой взгляд это скорее артефакт совместимости с ECMA чем что либо другое.

Формально или нет, но в С++ и Яве если я ничего не путаю, это запрещено, вызывать конструктор таким образом. Или как минимум не принято. Нужно через new. Поэтому и удивился. Ну ладно, проще игнорировать эту возможность. А что, в других классах тоже можно так конструктор вызывать как функцию?

udaaff 24.03.2010 18:26

Перечитайте еще раз пост AL.exe

XDiaBLo 24.03.2010 18:32

Цитата:

Сообщение от udaaff (Сообщение 895390)
Перечитайте еще раз пост AL.exe

Тьфу чёрт, я глянул по его ссылке, и подумал что это описание конструктора класса. А это набор функций. Тогда понятно.

wvxvw 24.03.2010 18:35

Нет, только те, которые являются одновременно ECMA и AS3:
Код AS3:

trace(Date(null), int(null), uint(null), Number(null), 
        Array(null), Object(null), RegExp(null), XML(null),
        XMLList(null), String(null), Boolean(null));
 
trace(Date(null) is Date, int(null) is int, uint(null) is uint, Number(null) is Number,
        Array(null) is Array, Object(null) is Object, RegExp(null) is RegExp, XML(null) is XML,
        XMLList(null) is XMLList, String(null) is String, Boolean(null) is Boolean);

И по непонятной причине только Date вместо создания нового объекта Date делает какую-то ерунду.


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

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