Actionscript 3 &引用;访问未定义的财产”;实际定义属性时出错
回答了我自己的问题:我不能像在课堂上那样公开声明任何变量。它们必须在函数中声明,在本例中为initialize() 我有一门课叫“寿司” } …和一个主要类。我的主类创建了两个Sushi对象:test1和test2Actionscript 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
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";
}
}
}