【问题标题】:Using a Function to create an Object in actionscript 3.0在 actionscript 3.0 中使用函数创建对象
【发布时间】:2010-10-02 23:36:21
【问题描述】:

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

但是上面的代码出现编译错误

加载配置文件 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 错误:参数数量不正确。预期 0 var 学生 = 新学生(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 不明确的 不明确的

【问题讨论】:

    标签: javascript actionscript-3 object


    【解决方案1】:

    您需要在文件中的自己的类中声明 Student。这样,学生就可以在 Main 中的任何地方访问。

    package{
       import flash.display.Sprite;
    
       public class Main extends Sprite{
          public function Main(){
             var student = new Student( 33 );
             trace( student.age );
          }
       }
    }
    
    
    class Student
    {
       public var age : uint
       public function Student( age : uint ) 
       {
          this.age = age;
       }
    }
    

    【讨论】:

    • 不,那是班级学生,我想你误会了。函数可以存在于类之外。
    【解决方案2】:

    从句法上讲,这是两者分歧的一个领域(在众多领域中)。 ;)

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

    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 的“原型”属性一样。

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

    【讨论】:

    • JavaScript 和 ActionScript。 (看起来我漏掉了一个“the”——谢谢你的提醒。)
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多