Поскольку actionscript 3.0 основан на ECMAscript, он имеет некоторые сходства с javascript. Одним из таких сходств, с которыми я играю, является создание объектов из функций.
В javascript для создания объекта,
var student = new Student( 33 );
document.write( student.age );
function Student( age ){
this.age = age;
}
В actionscript 3.0 Объекты обычно создаются через класс, но объекты могут создаваться, как в javascript, через функции конструктора.
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;
}
Однако я получаю ошибку компиляции с кодом выше
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 );
^
Мне было интересно, почему это так? Чтобы сделать вещи еще более странными, следующий код работает
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);
}
Выход для этого кода
33
undefined
undefined