Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 &引用;访问未定义的财产”;实际定义属性时出错_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 &引用;访问未定义的财产”;实际定义属性时出错

Actionscript 3 &引用;访问未定义的财产”;实际定义属性时出错,actionscript-3,flash,Actionscript 3,Flash,回答了我自己的问题:我不能像在课堂上那样公开声明任何变量。它们必须在函数中声明,在本例中为initialize() 我有一门课叫“寿司” } …和一个主要类。我的主类创建了两个Sushi对象:test1和test2 private var test1 = new Sushi(); test1.setName("Test1"); private var test2 = new Sushi(); test2.setName("Test2"); 无论何时运行它,都会出现错误“访问未定义的属性test

回答了我自己的问题:我不能像在课堂上那样公开声明任何变量。它们必须在函数中声明,在本例中为initialize()

我有一门课叫“寿司”

}

…和一个主要类。我的主类创建了两个Sushi对象:test1和test2

private var test1 = new Sushi();
test1.setName("Test1");
private var test2 = new Sushi();
test2.setName("Test2");

无论何时运行它,都会出现错误“访问未定义的属性test1”,test2也是如此。我做错了什么?我如何从错误中吸取教训?

因为您将您的成员声明为
private
,所以在类的范围之外无法访问它们

在类中有控制作用域的访问修饰符。例如:

  • 内部
    -对同一包内的引用可见
  • private
    -对同一类中的引用可见
  • 受保护
    -对同一类和派生类中的引用可见
  • public
    -随处可见
  • static
    -指定属性属于该类,而不是该类的实例
在您的示例
Sushi
类中,因为您将这些成员声明为private,所以它们只能被
Sushi
类看到

package {
    public class Sushi {
        private var cName:String;

        public function setName(n:String): void {
            cName = n;
        }
    }
}
但是,您可以将该成员声明为公共成员:

package {
    public class Sushi {
        public var cName:String;
    }
}
当声明为公共时,您现在可以访问它们,如下所示:

var sushi:Sushi = new Sushi();
suschi.name = "Kappa Maki";
您的解决方案被视为一个属性,其中为变量定义了getter和setter

例如,这里的
\u price
是Sushi类只能访问的属性;但是,它公开了两种获取或设置价格值的公共方法:

package {
    public class Sushi {
        private var _price:Number;

        public function get price():Number {
            return _price;
        }

        public function set price(value:Number):void {
            _price = value;
        }
    }
}
这种面向对象的编程概念称为封装,有助于隐藏类的内部复杂性

通过删除setter,可以创建只读属性:

package {
    public class Sushi {
        private var _price:Number = 7.99;

        public function get price():Number {
            return _price;
        }
    }
}
现在,您可以获取价格;但是,您不能设置它

var sushi:Sushi = new Sushi();
trace("price is: $" + sushi.price); // traces: price is: $7.99
如果尝试设置属性,编译器将抛出错误:

var sushi:Sushi = new Sushi();
sushi.price = 1.99; // throws error: Property price is read-only.
根据其初始化,可以将其默认值内联设置为其定义,如中所示:

package {
    public class Sushi {
        public var cName:String = "Kappa Maki";
    }
}
或者,您可以在类构造函数中设置它们的初始值,该构造函数在声明新的实例时执行:

package {
    public class Sushi {
        public var cName:String;

        public function Sushi {
            cName = "Kappa Maki";
        }
    }
}
package {
    public class Sushi {
        public var cName:String;

        public function Sushi {
            cName = "Kappa Maki";
        }
    }
}