You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

A table showing how each ActionScript language 'feature' is should be translated to Google Closure Tools assisted JavaScript by the FalconJS Compiler.


Using these AS3 references:
- Global Constants, Functions and Classes

- Operators

- Statements, Keywords and Directives

Using Google Closure annotations:

- Annotating JavaScript for the Closure Compiler


Table quick navigation:
- coming soon ;-)


Legend for Javascript column color usage:

Black: JavaScript matches ActionScript

Red: solution not agreed upon

Blue: solution looks good, need consencus to approve (use Comments or Notes column)

Green: solution agreed upon

 

Test Available In FlexJS (+/-)?

ActionScript

JavaScript + Closure annotation

Notes

Global Constants

 

 

 

 

Infinity

-

Infinity

Infinity

 

-Infinity

-

-Infinity

-Infinity

 

NaN

-

NaN

NaN

 

undefined

-

undefined

undefined

 

 

 

 

 

 

Global Functions

 

 

 

 

Array()

-

Array(...values)

new Array(...values)

There is no matching method in Javascript. Do we use a utility method that returns an array, or do we just use a 'new' Array object?

Boolean()

-

Boolean(value)

new Boolean(value)

See "Array" function note.

decodeURI()

-

decodeURI(value)

decodeURI(value)

 

decodeURIComponent()

-

decodeURIComponent(value)

decodeURIComponent(value)

 

encodeURI()

-

encodeURI(value)

encodeURI(value)

 

encodeURIComponent()

-

encodeURIComponent(value)

encodeURIComponent(value)

 

escape()

-

escape(value)

escape(value)

 

int()

-

int(value)

(value >> 0)

 

isFinite()

-

isFinite(value)

isFinite(value)

 

isNaN()

-

isNaN(value)

isNaN(value)

 

isXMLName()

-

isXMLName(value)

?

There is no matching implementation in JavaScript. We may need to build a utility function to cover this one.

Number()

-

Number(value)

new Number(value)

See "Array" function note.

Object()

-

result = Object(value) ;

result = /** @type 

Unknown macro: {Object}

*/ value;

In ActionScript, calling 'Object(value)' returns 'value' (since all values are objects). Given that, does it make sense to just write 'value' in JavaScript and let the Closure Compiler "cast" it?

parseFloat()

-

parseFloat(value)

parseFloat(value)

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="c9270b46-62cd-4ca5-8404-e2d389a4a5c3"><ac:plain-text-body><![CDATA[

parseInt()

-

parseInt(value, [radix])

parseInt(value, [radix])

 

]]></ac:plain-text-body></ac:structured-macro>

String()

-

String(value)

new String(value)

See "Array" function note.

trace()

-

trace(...values)

console.log(...values)

We may need a utility function to wrap 'console.log', as not all browsers have debugging enable, and calling to a non-existent 'console' object will cause an error.

uint()

 

uint(value)

(value >>> 0)

 

unescape()

-

unescape(value)

unescape(value)

 

Vector()

-

result = Vector.<type>(valueArray);

result = /** @type 

Unknown macro: {Array.<type>}

*/ valueArray;

Let the Closure Compiler handle (check) what is basically a type cast from general Array to a Typed Array.

XML()

-

XML(value)

?

Use 'goog.dom.xml'?

XMLList()

 

XMLList(value)

?

Use 'goog.dom.xml'?

 

 

 

 

 

Classes

 

 

 

 

ArgumentError

-

ArgumentError

Error

Need utility class and cast a regular error object to that, for the sake of the Closure Compiler?

arguments

-

arguments

arguments

 

Array

-

Array

Array

Not sure if all properties and methods of AS Array class map to the JS Array class.

Boolean

 

Boolean

Boolean

 

Class

-

package com.example.components
{
public class MyClass
{
    public function MyClass() {}
}
}

goog.provide('com.example.components.MyClass');

/**
 * @constructor
 */
com.example.components.MyClass = function() {};


 

Date

-

Date

Date

The JS class seems to be missing all the properties that the AS class offers. The methods on both classes match, AFAICT.

DefinitionError

-

DefinitionError

Error

Need utility class and cast a regular Error object to that, for the sake of the Closure Compiler?

Error

-

Error

Error

There is no 'errorID' property on the JS Error class

EvalError

-

EvalError

EvalError

Need utility class and cast a regular Error object to that, for the sake of the Closure Compiler?

Function

-

Function

Function

 

int

-

int

Number

 

JSON

-

JSON

JSON

How about support for "older" browsers? Do we provide "if not JSON, add custom JSON to window object"?

Math

-

Math

Math

 

Namespace

-

Namespace

?

Do we need a utility class?

Number

-

Number

Number

 

Object

-

Object

Object

"setPropertyIsEnumerable" not available on JS Object.prototype...

QName

-

 

 

 

RangeError

 

 

 

 

ReferenceError

 

 

 

 

RegExp

 

 

 

 

SecurityError

 

 

 

 

String

 

 

 

 

SyntaxError

 

 

 

 

TypeError

 

 

 

 

uint

 

 

 

 

URIError

 

 

 

 

Vector

 

 

 

 

VerifyError

 

 

 

 

XML

 

 

 

 

XMLList

 

 

 

 

 

 

 

 

 

Arithmetic

 

 

 

 

+

 

 

 

 

--

 

 

 

 

/

 

 

 

 

++

 

 

 

 

%

 

 

 

 

*

 

 

 

 

-

 

 

 

 

 

 

 

 

 

Arithmetic compound assignment

 

 

 

 

+=

 

 

 

 

/=

 

 

 

 

%=

 

 

 

 

*=

 

 

 

 

-=

 

 

 

 

 

 

 

 

 

Assignment

 

 

 

 

=

 

 

 

 

 

 

 

 

 

Bitwise

 

 

 

 

&

 

 

 

 

<<

 

 

 

 

~

 

 

 

 

|

 

 

 

 

>>

 

 

 

 

>>>

 

 

 

 

^

 

 

 

 

 

 

 

 

 

Bitwise compound assignment

 

 

 

 

&=

 

 

 

 

<<=

 

 

 

 

|=

 

 

 

 

>>=

 

 

 

 

>>>=

 

 

 

 

^=

 

 

 

 

 

 

 

 

 

Comment

 

 

 

 

/../

 

 

 

 

//

 

 

 

 

 

 

 

 

 

Comparison

 

 

 

 

==

 

 

 

 

>

 

 

 

 

>=

 

 

 

 

!=

 

 

 

 

<

 

 

 

 

<=

 

 

 

 

===

 

 

 

 

!==

 

 

 

 

 

 

 

 

 

Logical

 

 

 

 

&&

 

 

 

 

&&=

 

 

 

 

!

 

 

 

 

||

 

 

 

 

||=

 

 

 

 

 

 

 

 

 

Other

 

 

 

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b1b0ce7f-2a5a-4d25-9f42-35c67b8b81e7"><ac:plain-text-body><![CDATA[

[]

 

 

 

 

]]></ac:plain-text-body></ac:structured-macro>

as

 

 

 

 

,

 

 

 

 

?:

 

 

 

 

delete

 

 

 

 

.

 

 

 

 

in

 

 

 

 

instanceof

 

 

 

 

is

 

 

 

 

::

 

 

 

 

new

 

 

 

 

{}

 

 

 

 

()

 

 

 

 

/

 

 

 

 

:

 

 

 

 

typeof

 

 

 

 

void

 

 

 

 

 

 

 

 

 

String

 

 

 

 

+

 

 

 

 

+=

 

 

 

 

"

 

 

 

 

 

 

 

 

 

XML

 

 

 

 

@

 

 

 

 

{}

 

 

 

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="da7ddbe5-53a6-4a2c-98f8-7c0ca024178b"><ac:plain-text-body><![CDATA[

[]

 

 

 

 

]]></ac:plain-text-body></ac:structured-macro>

+

 

 

 

 

+=

 

 

 

 

delete

 

 

 

 

..

 

 

 

 

.

 

 

 

 

()

 

 

 

 

<>

 

 

 

 

 

 

 

 

 

Statements

 

 

 

 

break

 

 

 

 

case

 

 

 

 

continue

 

 

 

 

default

 

 

 

 

do...while

 

 

 

 

else

 

 

 

 

for

 

 

 

 

for...in

 

 

 

 

for each...in

 

 

 

 

if

 

 

 

 

label

 

 

 

 

return

 

 

 

 

super

 

 

 

 

switch

 

 

 

 

throw

 

 

 

 

try...catch...finally

 

 

 

 

while

 

 

 

 

with

 

 

 

 

 

 

 

 

 

Attribute Keywords

 

 

 

 

dynamic

 

 

 

 

final

 

 

 

 

internal

 

 

 

 

native

 

 

 

 

override

 

 

 

 

private

 

 

 

 

protected

 

 

 

 

public

 

 

 

 

static

 

 

 

 

 

 

 

 

 

Definition keywords

 

 

 

 

... (rest) parameter

 

 

 

 

class

 

 

 

 

const

 

 

 

 

extends

 

 

 

 

function

 

 

 

 

get

 

 

 

 

implements

 

 

 

 

interface

 

 

 

 

namespace

 

 

 

 

package

 

 

 

 

set

 

 

 

 

var

 

 

 

 

 

 

 

 

 

Directives

 

 

 

 

default xml namespace

 

 

 

 

import

 

 

 

 

include

 

 

 

 

use namespace

 

 

 

 

 

 

 

 

 

Namespaces

 

 

 

 

AS3

 

 

 

 

flash_proxy

 

 

 

 

object_proxy

 

 

 

 

 

 

 

 

 

Primary expression keywords

 

 

 

 

false

 

 

 

 

null

 

 

 

 

this

 

 

 

 

true

 

 

 

 

 

 

 

 

 

OLD

 

 

 

 

Inheriting

 

package com.example.components{
import org.apache.flex.Button;

public class MyClass extends Button
{
	public function MyClass()
	{
		super();
	}
}
}

goog.provide('com.example.components.MyClass');

goog.require('org.apache.flex.Button');

/**
 * @constructor
 * @extends {org.apache.flex.Button}
 */
com.example.components.MyClass = function() {
    goog.base(this);
};
goog.inherits(com.example.components.MyClass, org.apache.flex.Button);

 

Implementing

 

TBD

TBD

 

Inheriting + Implementing

 

TBD

TBD

 

 

 

 

 

 

Fields

 

 

 

 

private

 



private var _myVar:String = "";

Inside the constructor function:

/**
 * @private
 * @type {string}
 */
this._myVar = '';

 

protected

 

This is how far I got today ;-)

 

 

public

 

 

 

 

Global Constants

 

 

 

 

  • No labels