Каковы основные различия между JavaScript и ActionScript 3? - PullRequest
36 голосов
/ 15 февраля 2010

Я знаю, что оба языка относятся к одному стандарту ECMA-262. Кажется, что эти два становятся очень похожими с JavaScript, добавляющим прослушиватели событий для базовых экземпляров Object с помощью таких методов, как freeze и seal в EMCAScript-262, 5-е издание и тому подобное. Мне было интересно, в чем различия?

Ответы [ 7 ]

33 голосов
/ 15 февраля 2010

Прежде всего, ActionScript 3 и JavaScript определены в ECMA-262 , поэтому у них много общего. Например, оба языка поддерживают наследование прототипов. Однако неверно, что ActionScript полностью реализует ES4 .

ActionScript реализует несколько функций, которые не определены в ECMA-262, и некоторые - но определенно не все - ES4.

Так что же AS3 добавляет к ECMA-262? Это также отличия от JavaScript:

  • Код с динамической и статической типизацией
  • Пакеты, классы и интерфейсы
  • Стандартная модель наследования ОО (не на основе прототипа, статически типизированная)
  • тип данных uint и int
  • E4X (ECMA-357)
  • Типобезопасная условная компиляция (ES4)
  • Vector. тип данных (ES4)

Может быть, я забыл некоторые функции. Я не уверен, что XML, XMLList и т. Д. Уже определены в 262 или пришли с 357.

Однако ключевое отличие заключается в стандартной библиотеке. JavaScript поставляется с парой предопределенных классов, таких как DOMElement и зависимые от браузера дополнения. ActionScript имеет довольно большую стандартную библиотеку с такими функциями, как потоковое видео, и совместима на всех платформах.

12 голосов
/ 15 февраля 2010

Я программировал как на ActionScript, так и на Javascript, и с менее технической точки зрения я вижу два основных различия.

1) JavaScript более мощный. Вы можете делать гораздо больше с языком, потому что у него нет «компилятора» или типов. Есть несколько отличных фреймворков, таких как ExtJS и jQuery , которые пытаются упростить для вас вещи, но даже с ними вам действительно разрешено наносить поразительное количество урона, если вы хотите к.

2) ActionScript намного более ограничен и, следовательно, намного проще в обслуживании. Adobe проделала большую работу, чтобы удержать вас от сложных частей ECMAScript. ECMAScript Объекты, наследование прототипов и замыкания - это три понятия, которые вам действительно не нужно понимать для программирования в ActionScript. Вам просто нужно понять, как использовать объект Adobe "Class".

Для простого использования я предпочитаю JavaScript. Однако, как только проект становится большим, это зависит от того, для кого вы кодируете. Если бы у меня была команда из 5 разработчиков, программирующих на стартапах, я бы выбрал JavaScript в одно мгновение. Тем не менее, в руках крупной корпорации или научного сообщества вам может быть безопаснее полагаться на платформу Adobe.

Надеюсь, это поможет.

5 голосов
/ 15 февраля 2010

Один тип Safetly. Actionscript требует, чтобы вы установили тип для всех объектов, а JavaScript - нет (в этом отношении в JavaScript одна переменная может иметь один тип, а затем сразу же устанавливать другой тип).

Actionscript является объектно-ориентированным. Хотя это можно сделать в JavaScript, Actionscript допускает наследование объектов и т. Д.

4 голосов
/ 15 февраля 2010

По сути, основное отличие, которое я нахожу, состоит в том, что ActionScript - это более подробный статически типизированный язык на основе классов, где javascript - это язык-прототип.

К сожалению, в ActionScript нет вывода типов, поэтому использование Flex Builder выдает предупреждение каждый раз, когда вы оставляете что-то нетипизированное, что я считаю ненужным и слишком многословным, оно не только делает его более многословным, чем javascript, но я нахожу эквивалентный код более многословный, чем C #.

Тем не менее, дополнительная многословность действительно имеет улучшенные характеристики и дополнительную безопасность типов во время компиляции. К сожалению, это также значительно увеличивает время сборки: в приложениях Java Script любого размера я привык получать мгновенные отзывы, тогда как мой последний проект ActionScript имел время сборки более 2 минут.

3 голосов
/ 19 августа 2012

Основные отличия заключаются в том, что ActionScript 3 поддерживает как наследование на основе классов, так и наследование прототипов, обеспечивает привязку пространства имен между именами классов и именами файлов и не поддерживает некоторые глобальные методы JavaScript, такие как eval. К счастью, вы можете сделать несколько вещей, чтобы преодолеть разрыв.

Вы можете глобально установить пространство имен, используя ES для ECMAScript или AS3 для ActionScript 3:

use namespace ES;
use namespace AS3; 

Если вы используете пространство имен AS3, любое переопределение метода должно использовать пространство имен AS3 и атрибут переопределения.

Если вы не используете пространство имен AS3, вы можете использовать методы-прототипы и propertyIsEnumerable.

Вы можете выборочно использовать версию свойства или метода в пространстве имен AS3 в динамической функции:

var nums:Array = new Array(1, 2, 3); 
nums.AS3::pop(); 
trace(nums); // output: 1,2

Чтобы отключить наследование на основе классов, вы также можете использовать следующие параметры компилятора: compc -as3=false -strict=false -es=true

import *
class foo
  {
  dynamic function foo() 
    {

    }
  }

Если вы не используете пространство имен AS3, экземпляр основного класса наследует свойства и методы, определенные на объекте-прототипе.

Если вы решите использовать пространство имен AS3, экземпляр базового класса наследует свойства и методы, определенные в определении класса.

Вот общие черты между ECMAScript-4 и ECMAScript-2017 или более поздней:

Feature 		 ES4/ES6+ 	ES4 Only                    
Rest parameter 		 ☑ 
Destructuring 		 ☑
ByteArrays 		 ☑
Class 		 	 ☑  
Interface 		 		 ☑
Static fields 		 		 ☑
Parameter default 	 ☑
Rest Parameters 	 ☑
Bound methods 		 		 ☑
dynamic <b>this</b> value &#9;&#9;&#9; &#9745;
multiple <b>catch</b> clauses &#9;&#9;&#9; &#9745;
short-circuit-and (&&=) &#9;&#9; &#9745;
short-circuit-or (||=) &#9;&#9;&#9; &#9745;
Type Annotations &#9;&#9;&#9; &#9745;

Ссылки

2 голосов
/ 19 сентября 2013

С точки зрения разработчика, что важнее всего:

1) Javascript на самом деле не ООП, у него НЕТ супер ключевого слова, что означает, что если вы переопределите (каким-либо образом) что-то, вы неНазовите это через super, и это прерыватель сделки для сложных программ, для которых ООП является ключом, а Actionscript3 - все ООП, вы можете иметь миллион строк кода ActionScript3, работающих вместе и хорошо поддерживаемых.

2)Actionscript3 запускается в Flash Player, который имеет только одну реализацию от Adobe, это означает, что он постоянно работает, все браузеры (если установлен Flash Player), но Javascript запускается в браузерах напрямую, но у каждого браузера есть своя реализация, что означаетКод Javascript должен быть проверен на всех целевых браузерах, чтобы обеспечить его работу.

0 голосов
/ 22 апреля 2016

Честно говоря, это не то же самое, потому что скрипт действия загружен с EMQJ24, новым языком для веб-сайтов с высоким уровнем развития. в то время как JS все еще с EMCA22, разница между ними заключается в стиле и формате кода. а также сценарий действий достаточно давний, поэтому большинство программистов в настоящее время используют обновленный язык CSX01 от cSS, он может распознавать все типы языков без строки.

...