当前位置:  开发笔记 > 编程语言 > 正文

使用Function在actionscript 3.0中创建一个Object

如何解决《使用Function在actionscript3.0中创建一个Object》经验,为你挑选了1个好方法。

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

Christian Nu.. 6

从语法上讲,这是两个分歧的区域(在众多区域中).;)

您可以使用函数创建对象:

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"属性一样.

我实际上不确定是什么样的烦恼,命名冲突,奇怪等等,你可能会遇到这种方法,因为我还没有深入研究它的文档 - 但它确实有效!



1> Christian Nu..:

从语法上讲,这是两个分歧的区域(在众多区域中).;)

您可以使用函数创建对象:

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"属性一样.

我实际上不确定是什么样的烦恼,命名冲突,奇怪等等,你可能会遇到这种方法,因为我还没有深入研究它的文档 - 但它确实有效!

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有