Actionscript 3 简单字节加载程序获取运行时错误(错误#1010:术语未定义且没有属性。)

Actionscript 3 简单字节加载程序获取运行时错误(错误#1010:术语未定义且没有属性。),actionscript-3,flash,apache-flex,actionscript,Actionscript 3,Flash,Apache Flex,Actionscript,我正在创建一个简单的程序,它需要跟踪bytesLoaded和ByTestTotal。看起来一切正常,但我遇到了以下运行时错误:错误#1010:术语未定义且没有属性。这是我的as3.0类代码: package { import flash.display.*; import flash.text.TextField; import flash.events.Event; public class shoolWork3 extends MovieClip { public

我正在创建一个简单的程序,它需要跟踪bytesLoaded和ByTestTotal。看起来一切正常,但我遇到了以下运行时错误:错误#1010:术语未定义且没有属性。这是我的as3.0类代码:

package  {

import flash.display.*;
import flash.text.TextField;
import flash.events.Event;

   public class shoolWork3 extends MovieClip {
       public function shooWork3():void {
           addEventListener(Event.ENTER_FRAME, loadProgress);

        function loadProgress(event:Event) {
            // get bytes loaded and bytes total
            var movieBytesLoaded:int = this.root.loaderInfo.bytesLoaded;
            var movieBytesTotal:int = this.root.loaderInfo.bytesTotal;

            //Convert to kilobytes
            var gameKilobytesLoaded:int = gameBytesLoaded / 1024;
            var gameKilobytesTotal:int = gameBytesTotal / 1024;
      }
    }
  }
}

在函数中,
引用的是
全局
对象范围,而不是类,并且在
全局
对象上没有
属性,因此出现错误。如果要访问类的属性,则必须删除
this
关键字

var movieBytesLoaded:int = root.loaderInfo.bytesLoaded;
...

此外,您的变量被称为
moviebytesload
movieBytesTotal
,但您试图访问
gamebytesload
gameBytesTotal
,这也不起作用。

捕捉得好!值得注意的是,之所以发生这种情况,是因为OP在其构造函数方法中定义了事件处理函数
loadProgress()
。请注意,如果在调试器中运行此代码,您将看到
this
引用AS3的“全局”对象。它不同于Javascript,我假设
这个
将引用函数。另一个使此代码起作用的解决方案是将
loadProgress()
声明为
SchoolWork3
类的方法。这样做可能更可取:这是AS3中的常见模式,可以使以后很容易删除事件侦听器。对不起,我的错,它甚至与JavaScript中的情况不同:)实际上,在JavaScript中,OPs代码可以工作,
this
将引用
窗口
对象,但在尝试访问该对象上的引用属性之前,它将检查当前函数范围,然后检查父函数范围。我会更正我的答案。