Da actionscript 3.0 auf ECMAscript basiert, weist es einige Ähnlichkeiten mit Javascript auf. Eine dieser Gemeinsamkeiten, mit der ich herumgespielt habe, ist die Erstellung von Objekten aus Funktionen.
In Javascript, um ein Objekt zu erstellen,
var student = new Student( 33 );
document.write( student.age );
function Student( age ){
this.age = age;
}
In Actionscript 3.0 werden Objekte in der Regel durch Klassen erstellt, aber Objekte können auch, wie in Javascript, durch Konstrukteursfunktionen erstellt werden.
package{
import flash.display.Sprite;
public class Main extends Sprite{
public function Main(){
var student = new Student( 33 );
trace( student.age );
}
}
}
function Student( age ) {
this.age = age;
}
Ich erhalte jedoch einen Kompilierfehler mit dem obigen Code
Loading configuration file C:\\Program Files\\Adobe\\Flex Builder 3\\sdks\\3.1.0\\frameworks\\flex-config.xml
C:\\Documents and Settings\\mallen\\Desktop\\as3\\Main.as(5): col: 23 Error: Incorrect number of arguments. Expected 0
var student = new Student( 33 );
^
Ich habe mich gefragt, warum das so ist? Um die Sache noch merkwürdiger zu machen, funktioniert der folgende Code tatsächlich
package{
import flash.display.Sprite;
public class Main extends Sprite{
public function Main(){
Student( 33 );
var student = new Student();
trace(student.age);
/* When I add the two lines below, the code wont compile? */
//var student2 = new Student( 33 );
//trace(student2.age);
}
}
}
function Student( age ){
this.age = age;
trace(age);
}
Die Ausgabe für diesen Code lautet
33
undefined
undefined