2010-02-15 19 views
33

Sé que ambos idiomas son del mismo estándar ECMA-262. Parece que los dos se están volviendo muy similares con JavaScript al agregar oyentes de eventos para las instancias de Object centrales a través de métodos como freeze y seal en EMCAScript-262 5th edition y demás. Me preguntaba cuáles son las diferencias.¿Cuáles son las principales diferencias entre JavaScript y ActionScript 3?

+3

No es realmente el mismo estándar. AS-3 es del ECMAScript 4 ahora muerto (a.k.a. Javascript 2.0), y el Javascript que vemos ahora es principalmente de ECMAScript 3. – kennytm

Respuesta

31

En primer lugar, ActionScript 3 y JavaScript se definen en ECMA-262 por lo que tienen mucho en común. Ambos lenguajes presentan herencia prototipo, por ejemplo. Sin embargo, no es correcto que ActionScript implemente por completo ES4.

ActionScript implementa un par de funciones que no están definidas en ECMA-262 y algunas, pero definitivamente no todas, de ES4.

¿Qué agrega AS3 a ECMA-262?Esas son también las diferencias a JavaScript:

  • dinámicamente y código estático de tipos
  • Paquetes, Clases e Interfaces
  • modelo de herencia OO estándar (no prototipo basado, con tipos estáticos)
  • uint y int tipo de datos
  • E4X (ECMA-357)
  • de tipo seguro compilación condicional (ES4)
  • vectorial. <T> tipo de datos (ES4)

Tal vez he olvidado algunas funciones. No estoy seguro de si XML, XMLList etc. ya están definidos en 262 o si vienen con 357.

Sin embargo, la diferencia clave es la biblioteca estándar. JavaScript viene con un par de clases predefinidas como DOMElement y adiciones dependientes del navegador. ActionScript tiene una biblioteca estándar bastante grande con funciones como la transmisión de video y es coherente en todas las plataformas.

5

Uno es tipo Safetly. Actionscript requiere que establezca un tipo para todos los objetos, y JavaScript no (para el caso, en JavaScript, una variable puede ser de un tipo y luego establecerse de inmediato en otro tipo).

Actionscript está orientado a objetos. Aunque puede tener esto en JavaScript, Actionscript permite la herencia de objetos, etc.

+0

al igual que AS2 (yay!) –

+7

Hay herencia en Javascript. Eso es herencia prototipo. – kennytm

+2

No, no necesita escribir una referencia de objeto en ActionScript. Haz lo mismo que en JavaScript: var x = ... –

12

He estado programando tanto en ActionScript como en Javascript, y desde un punto de vista menos técnico, veo dos diferencias principales.

1) JavaScript es más poderoso. Puede hacer mucho más con el idioma porque no tiene un "compilador" o tipos. Existen algunos grandes frameworks como ExtJS y jQuery que intentan y simplifican las cosas para ti, pero incluso con ellos, puedes hacer una gran cantidad de daño si quieres.

2) ActionScript es mucho más restrictivo y, por lo tanto, mucho más fácil de mantener. Adobe hizo un gran trabajo para mantenerlo alejado de las partes difíciles de ECMAScript. Los objetos ECMAScript, la herencia de prototipos y los cierres son tres conceptos que realmente no necesita comprender para programar en ActionScript. Solo necesita comprender cómo usar el objeto "Clase" de Adobe. Para los usos simples, prefiero JavaScript. Sin embargo, una vez que el proyecto se amplía, depende de quién esté codificando. Si tuviera un equipo de 5 desarrolladores que programaran en una empresa incipiente, elegiría JavaScript en un abrir y cerrar de ojos. Sin embargo, en el perímetro de una gran corporación o academia, puede estar más seguro dependiendo de la plataforma de Adobe.

Espero que ayude.

+3

* "Para usos simples, prefiero JavaScript." * ¿Perdón? Pensé que ActionScript no se puede usar fuera de Flash. – kennytm

+0

Eso es verdad, no puede. Lo siento si insinué eso. La mitad de la razón por la que usaría JavaScript para proyectos pequeños es porque el usuario no necesitaría lidiar con flash. – Stephano

+0

Buenos puntos Stephano. Apreciar la información. – Chin

4

Esencialmente, la principal diferencia que encuentro es que ActionScript es más un lenguaje detallado basado en clases de tipo estático donde JavaScript es un lenguaje prototípico.

Desafortunadamente no hay inferencia de tipos en ActionScript, por lo que usar Flex Builder da una advertencia cada vez que deja algo sin tipo que me parece innecesario y demasiado detallado, no solo lo hace más detallado que javascript, sino que encuentro un código equivalente ser más detallado que C#.

Sin embargo, la verbosidad adicional tiene mejoras en rendimiento y seguridad de tipo adicional en tiempo de compilación. Desafortunadamente, esto también aumenta considerablemente el tiempo de compilación, en las aplicaciones Java Script de cualquier tamaño estoy acostumbrado a recibir comentarios instantáneos, mientras que mi último proyecto de ActionScript tuvo un tiempo de compilación superior a 2 minutos.

3

Las diferencias clave son que ActionScript 3 admite herencia basada en clases y herencia de prototipos, impone enlaces de espacio de nombres entre nombres de clase y nombres de archivos, y no admite algunos métodos globales de JavaScript como eval. Afortunadamente, puedes hacer varias cosas para cerrar la brecha.

Es posible ajustar el espacio de nombres global utilizando ES para ECMAScript o AS3 para ActionScript 3:

use namespace ES; 
use namespace AS3; 

Si está utilizando el espacio de nombres AS3, cualquier método sustituto debe utilizar el espacio de nombres AS3 y el atributo de anulación.

Si no está utilizando el espacio de nombres AS3, puede usar los métodos de prototipo y propertyIsEnumerable.

Se puede utilizar de forma selectiva la versión AS3 espacio de nombre de una propiedad o método en una función dinámica:

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

Para desactivar la herencia basada en la clase, también puede utilizar las siguientes opciones del compilador: compc -as3=false -strict=false -es=true

import * 
class foo 
    { 
    dynamic function foo() 
    { 

    } 
    } 

Si no utiliza el espacio de nombres AS3, una instancia de una clase central hereda las propiedades y métodos definidos en el objeto prototipo.

Si decide utilizar el espacio de nombres AS3, una instancia de una clase central hereda las propiedades y los métodos definidos en la definición de clase.

que aquí hay una características comunes entre ECMAScript-4 y ECMAScript-2017 o posterior:

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

Referencias

1

Desde el punto de vista del desarrollador, lo que más importa:

1) Jav ascript no es realmente OOP, no tiene NINGUNA palabra clave super, lo que significa que si anula (de alguna manera) algo, no puede llamarlo súper, y este es el factor decisivo para los programas complejos para los que OOP es la clave, y Actionscript3 es todo OOP, puede tener millones de líneas del código ActionScript3 trabajando juntas y bien mantenidas.

2) Actionscript3 se ejecuta en Flash Player que tiene solo una implementación de Adobe, esto significa que es constante todo el tiempo, todos los navegadores (siempre que esté instalado Flash Player), pero Javascript se ejecuta en los navegadores directamente, pero cada navegador tiene su propia implementación, lo que significa que su código Javascript debe probarse contra todos los navegadores específicos para garantizar el funcionamiento.

+0

"JavaScript no es realmente OOP". JavaScript está muy orientado a objetos. De qué diablos estás hablando. "no se puede llamar [a un método anulado] a través de super". El hecho de que esperes modismos basados ​​en clases en un lenguaje basado en prototipos es revelador. Creo que encontrarás JavaScript es más que capaz de polimorfismo. "factor decisivo para programas complejos para los que OOP es la clave" OOP no es la solución para todo. Creo que deberías buscar otros paradigmas de programación antes de hacer tales afirmaciones ingenuas. –

+0

"Actionscript3 se ejecuta en Flash Player, que tiene solo una implementación ... pero Javascript ... cada navegador tiene su propia implementación, lo que significa que su código JavaScript debe probarse contra todos los navegadores específicos ..." Completar y decir tonterías. Todos los idiomas ampliamente utilizados están definidos por un estándar. El estándar define cómo se implementará el lenguaje, y cualquier implementación seria seguirá el estándar. Si necesita "prueba de función", está utilizando una extensión de proveedor. Esa no es la culpa del lenguaje por ser inconsistente; es suyo por usar funciones/extensiones no estándar. –

-3

francamente, no es lo mismo, el script de acción cuz está cargado con EMQJ24, el nuevo lenguaje para el sitio web de alto desarrollo. mientras JS todavía está con EMCA22, la diferencia entre ellos es el estilo y el formato del código. y la secuencia de comandos de acción son lo suficientemente años, es por eso que la mayor parte del programador en la actualidad con CSX01 actualizado lenguaje de cSS, puede reconocer todo tipo de lenguaje sin línea.

+4

¿Podría seguir con el inglés común? Me cuesta entender lo que escribiste. – MeanGreen

Cuestiones relacionadas