javascript - 在 actionscript 3.0 中使用函数创建对象

标签 javascript actionscript-3 object

由于 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/

相关文章:

javascript - 如何保持网络爬虫运行?

actionscript-3 - 从播放 h.264 (mp4) 视频的视频显示器中捕获位图数据

actionscript-3 - 如何从 Flash CS4 AS3 中的屏幕中删除所有一类 child ?

javascript - 在 for 循环中向对象添加元素

带有 x 轴作为字符串的 Javascript FLOT 组合条形图和折线图

javascript - 如何在node.js中访问子文件中的父模块数据

javascript - d3fc - 添加两个 discontinuityProvider 的

actionscript-3 - URLLoader 数据到 BitmapData

java - 如何在 Java 中创建处理泛型和数组的抓取方法

javascript - 如何从内部删除一个对象?