由于 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 ); ^
I was wondering why this is? To make things even weirder, the following code does work
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
最佳答案
从句法上讲,这是两者不同的一个领域(在许多领域中)。 ;)
您可以使用函数创建对象:
private var studentName:String = "Joe";
private function init():void
{
var s = new Student("Chris");
trace(s.studentName);
trace(this.studentName);
trace(typeof s);
trace(typeof Student);
s.sayHi();
trace("Hello, " + s.studentName + ". I'm " + studentName + ".");
}
var Student:Function = function(studentName:String):void
{
this.studentName = studentName;
this.sayHi = function():void
{
trace("Hi! I'm " + this.studentName + ".");
};
};
// Chris
// Joe
// object
// function
// Hi! I'm Chris.
// Hello, Chris. I'm Joe.
...只是语法略有不同。 Function 类也是动态的,这意味着您可以在运行时将方法移植到它的实例上(就像我在上面对 sayHi() 所做的那样),就像您可能使用 JavaScript 的“原型(prototype)”属性一样。
我实际上不确定这种方法可能会遇到什么样的烦恼、命名冲突、怪癖等等,因为我还没有深入研究它的文档——但它确实有效!
关于javascript - 在 actionscript 3.0 中使用函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/470230/