web-dev-qa-db-fra.com

Quelles sont les principales différences entre JavaScript et ActionScript 3?

Je sais que les deux langues sont issues de la même norme ECMA-262. Il semble que les deux deviennent très similaires avec l'ajout JavaScript d'écouteurs d'événements pour les instances d'objet principales via des méthodes telles que freeze et seal dans EMCAScript-262 5e édition et autres. Je me demandais quelles sont les différences?

36
Todd Moses

Tout d'abord, ActionScript 3 et JavaScript sont tous deux définis dans ECMA-262 donc ils ont beaucoup en commun. Les deux langages proposent par exemple l'héritage de prototypes. Il n'est cependant pas correct qu'ActionScript implémente complètement ES4 .

ActionScript implémente quelques fonctionnalités qui ne sont pas définies dans ECMA-262 et certaines - mais certainement pas toutes - d'ES4.

Alors qu'est-ce que AS3 ajoute à ECMA-262? Ce sont aussi les différences avec JavaScript:

  • Code typé dynamiquement et statiquement
  • Packages, classes et interfaces
  • Standard OO modèle d'héritage (non basé sur un prototype, typé statiquement)
  • type de données uint et int
  • E4X (ECMA-357)
  • Compilation conditionnelle de type sécurisé (ES4)
  • Type de données vectoriel. <T> (ES4)

J'ai peut-être oublié certaines fonctionnalités. Je ne sais pas si XML, XMLList etc. sont déjà définis en 262 ou fournis avec 357.

La principale différence est cependant la bibliothèque standard. JavaScript est livré avec quelques classes prédéfinies comme DOMElement et des ajouts dépendants du navigateur. ActionScript possède une bibliothèque standard assez large avec des fonctionnalités telles que le streaming vidéo et est cohérente sur toutes les plateformes.

33
Joa Ebert

J'ai programmé à la fois en ActionScript et en Javascript, et d'un point de vue moins technique, je vois deux différences principales.

1) JavaScript est plus puissant. Vous êtes autorisé à faire beaucoup plus avec le langage car il n'a pas de "compilateur" ou de types. Il existe d'excellents cadres comme ExtJS et jQuery qui essaient de simplifier les choses pour vous, mais même avec eux, vous êtes vraiment autorisé à faire une quantité incroyable de dégâts si tu veux.

2) ActionScript est beaucoup plus confinant et donc beaucoup plus facile à maintenir. Adobe a fait beaucoup de travail pour vous tenir à l'écart des parties difficiles d'ECMAScript. Les objets ECMAScript, l'héritage prototypique et les fermetures sont trois concepts que vous n'avez vraiment pas besoin de comprendre pour programmer en ActionScript. Il vous suffit de comprendre comment utiliser l'objet "Classe" d'Adobe.

Pour des utilisations simples, je préfère JavaScript. Cependant, une fois que le projet est volumineux, cela dépend de qui vous codez. Si j'avais une équipe de 5 développeurs programmant dans une start-up scrappy, je choisirais JavaScript en un clin d'œil. Cependant, dans la circonférence d'une grande entreprise ou d'universités, vous pourriez être plus sûr de compter sur la plate-forme d'Adobe.

J'espère que cela pourra aider.

13
Stephano

L'un est de type Safetly. Actionscript nécessite que vous définissiez un type pour tous les objets, et pas JavaScript (d'ailleurs, en JavaScript, une variable peut être un type, puis immédiatement définie sur un autre type).

Actionscript est orienté objet. Bien que vous puissiez en quelque sorte l'avoir en JavaScript, Actionscript permet l'héritage d'objets, etc.

5
Gabriel McAdams

Essentiellement, la principale différence que je trouve est qu'ActionScript est plus un langage basé sur des classes de type statique verbeux alors que javascript est un langage prototypique.

Malheureusement, il n'y a pas d'inférence de type dans ActionScript, donc l'utilisation de Flex Builder donne un avertissement chaque fois que vous laissez quelque chose de non typé que je trouve inutile et trop verbeux, non seulement cela le rend plus verbeux que javascript, mais je trouve que le code équivalent est plus verbeux que C #.

Cependant, la verbosité supplémentaire a des améliorations de rendement et une sécurité de type supplémentaire au moment de la compilation. Malheureusement, cela augmente également considérablement le temps de construction, dans Java Applications de script de toute taille, je suis habitué aux commentaires instantanés alors que mon dernier projet ActionScript avait un temps de construction dépassant 2 minutes.

4
mythz

Les principales différences sont qu'ActionScript 3 prend en charge l'héritage basé sur les classes et l'héritage prototypique, applique les liaisons d'espace de noms entre les noms de classe et les noms de fichiers et ne prend pas en charge certaines méthodes JavaScript globales telles que eval. Heureusement, vous pouvez faire plusieurs choses pour combler l'écart.

Vous pouvez définir globalement l'espace de noms à l'aide d'ES pour ECMAScript ou AS3 pour ActionScript 3:

use namespace ES;
use namespace AS3; 

Si vous utilisez l'espace de noms AS3, tout remplacement de méthode doit utiliser l'espace de noms AS3 et l'attribut de remplacement.

Si vous n'utilisez pas l'espace de noms AS3, vous pouvez utiliser les méthodes de prototype et propertyIsEnumerable.

Vous pouvez utiliser de manière sélective la version d'espace de noms AS3 d'une propriété ou d'une méthode dans une fonction dynamique:

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

Pour désactiver l'héritage basé sur une classe, vous pouvez également utiliser les options de compilation suivantes: compc -as3=false -strict=false -es=true

import *
class foo
  {
  dynamic function foo() 
    {

    }
  }

Si vous n'utilisez pas l'espace de noms AS3, une instance d'une classe principale hérite des propriétés et des méthodes définies sur l'objet prototype.

Si vous décidez d'utiliser l'espace de noms AS3, une instance d'une classe principale hérite des propriétés et des méthodes définies dans la définition de classe.

Voici les caractéristiques communes entre ECMAScript-4 et ECMAScript-2017 ou version ultérieure:

 Fonctionnalité ES4/ES6 + ES4 uniquement 
 Paramètre de repos ☑ 
 Déstructuration ☑ 
 ByteArrays ☑ 
 Classe ☑ 
 Interface ☑ 
 Champs statiques ☑ 
 Paramètre par défaut ☑ 
 Paramètres de repos ☑ 
 Méthodes liées ☑ 
 Dynamique ce valeur ☑ 
 multiple capture clauses ☑ 
 court-circuit-et (&& =) ☑ 
 court-circuit-ou (|| =) ☑ 
 Type Annotations ☑ 

Références

3
Paul Sweatte

Du point de vue du développeur, ce qui importe le plus:

1) Javascript n'est pas vraiment OOP, il n'a AUCUN super mot-clé, ce qui signifie que si vous remplacez (par quelque moyen que ce soit) quelque chose, vous ne pouvez pas l'appeler via super, et c'est le casse-deal pour les programmes complexes pour lesquels OOP est la clé, et Actionscript3 est tout OOP, vous pouvez avoir des millions de lignes de code Actionscript3 travaillant ensemble et bien entretenues.

2) Actionscript3 s'exécute dans Flash Player qui n'a qu'une seule implémentation d'Adobe, cela signifie qu'il est cohérent tout le temps, tous les navigateurs (tant que Flash Player est installé), mais Javascript s'exécute directement dans les navigateurs, mais chaque navigateur a sa propre implémentation, qui signifie que votre code Javascript doit être testé par rapport à tous les navigateurs ciblés pour garantir son fonctionnement.

2
user2336415