JavaScript和ActionScript 3之间的主要区别是什么?

时间:2010-02-15 19:04:46

标签: javascript actionscript-3 porting

我知道这两种语言都来自相同的ECMA-262标准。似乎这两者在JavaScript中通过EMCAScript-262第5版中的freezeseal等方法为核心对象实例添加事件监听器变得非常相似。我想知道差异是什么?

7 个答案:

答案 0 :(得分:33)

首先,ActionScript 3和JavaScript都在ECMA-262中定义,因此它们有很多共同之处。例如,这两种语言都具有原型继承。但是,ActionScript完全实现ES4

是不正确的

ActionScript实现了ECMA-262中未定义的一些功能以及ES4中的一些功能 - 但绝对不是全部功能。

那么AS3为ECMA-262添加了什么?这些也是与JavaScript的区别:

  • 动态和静态类型代码
  • 包,类和接口
  • 标准OO继承模型(不是基于原型,静态类型)
  • uint和int数据类型
  • E4X(ECMA-357)
  • 类型安全的条件编译(ES4)
  • 矢量< T>数据类型(ES4)

也许我已经忘记了一些功能。我不确定XML,XMLList等是否已经在262中定义或者是否带有357。

然而,关键的区别在于标准库。 JavaScript附带了几个预定义的类,如DOMElement和依赖于浏览器的添加。 ActionScript有一个相当大的标准库,具有视频流等功能,并且在所有平台上都是一致的。

答案 1 :(得分:12)

我一直在使用ActionScript和Javascript进行编程,从技术性较低的角度来看,我看到两个主要区别。

1)JavaScript更强大。您可以使用该语言执行更多操作,因为它没有“编译器”或类型。有一些很棒的框架,如ExtJSjQuery,可以为你尝试和简化一些事情,但即使有这些框架,如果你愿意的话,你真的可以做出惊人的伤害。

2)ActionScript更加局限,因此更容易维护。 Adobe做了很多工作,让您远离ECMAScript的困难部分。 ECMAScript对象,原型继承和闭包是您在ActionScript中编程时无需理解的三个概念。您只需要了解如何使用Adobe的“类”对象。

对于简单的用途,我更喜欢JavaScript。但是,一旦项目变大,这取决于您编码的对象。如果我有一个由5名开发人员组成的团队,他们会在一个充满斗志的初创公司中进行编程,那么我会在心跳中选择JavaScript。但是,在大公司或学术界的周长中,依靠Adobe的平台可能会更安全。

希望有所帮助。

答案 2 :(得分:5)

一个是Safetly类型。 Actionscript要求您为所有对象设置类型,而JavaScript则不需要(就此而言,在JavaScript中,一个变量可能是一种类型,然后立即设置为另一种类型)。

Actionscript是面向对象的。虽然你可以在JavaScript中使用它,但Actionscript允许对象继承等。

答案 3 :(得分:4)

基本上我发现的主要区别是ActionScript更像是一种冗长的静态类型的基于类的语言,其中javascript是一种原型语言。

不幸的是,ActionScript中没有类型推断,因此每次使用Flex Builder时都会发出警告,我发现这些内容不必要且过于冗长,不仅使它比javascript更冗长,而且我发现等效的代码是比C#更冗长。

然而,额外的详细程度确实在编译时具有良好的性能提升和额外的类型安全性。不幸的是,这也大大增加了构建时间,在任何规模的Java Script应用程序中,我习惯于即时反馈,而我的上一个ActionScript项目的构建时间超过2分钟。

答案 4 :(得分:3)

主要区别在于ActionScript 3支持基于类的继承和原型继承,强制类名和文件名之间的命名空间绑定,并且不支持某些全局JavaScript方法,例如eval。幸运的是,你可以做几件事来缩小差距。

您可以使用ES为ECMAScript或AS3为ActionScript 3全局设置命名空间:

use namespace ES;
use namespace AS3; 

如果您使用的是AS3名称空间,则任何方法覆盖都必须使用AS3名称空间 和override属性。

如果您没有使用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 this value 			 ☑
multiple catch clauses 			 ☑
short-circuit-and (&&=) 		 ☑
short-circuit-or (||=) 			 ☑
Type Annotations 			 ☑

<强>参考

答案 5 :(得分:2)

从开发人员的角度来看,最重要的是:

1)Javascript不是真正的OOP,它没有超级关键字,这意味着如果你覆盖(通过任何方式)某些东西,你不能通过super调用它,这就是OOP的复杂程序的交易破坏者是关键,Actionscript3是所有OOP,你可以有数百万行的Actionscript3代码一起工作,并且维护得很好。

2)Actionscript3在Flash Player中运行,其中只有一个来自Adobe的实现,这意味着它始终保持一致,所有浏览器(只要安装了Flash Player),但Javascript直接在浏览器中运行,但每个浏览器都有自己的实现,这意味着您的Javascript代码必须针对所有目标浏览器进行测试,以确保工作。

答案 6 :(得分:-3)

坦率地说它不一样,cuz动作脚本加载了高级开发网站的新语言EMQJ24。虽然JS仍然使用EMCA22,但它们之间的区别在于代码的样式和格式。并且动作脚本的年龄足够大,这就是为什么大多数程序员现在使用CSX更新语言来自cSS,它可以识别所有类型的语言,而不需要任何行。