Actionscript 3 AS3 1120实例化时出错
我试图在AS3中创建一个基本功能 我有一门课是这样的:Actionscript 3 AS3 1120实例化时出错,actionscript-3,class,Actionscript 3,Class,我试图在AS3中创建一个基本功能 我有一门课是这样的: package tax { public class Calculator { public function Calculator() { } private var grwage:Number; private var taxes:Number; private var superannuation:Number;
package tax
{
public class Calculator
{
public function Calculator()
{
}
private var grwage:Number;
private var taxes:Number;
private var superannuation:Number;
private var insurance:Number;
private var net:Number;
public function getGrwage():Number {
return grwage;
}
public function setGrwage(grwage:Number):void {
this.grwage = grwage;
}
public function getTaxes():Number {
return grwage;
}
public function setTaxes(taxes:Number):void {
this.taxes = grwage * 0.2;
}
public function getSup():Number {
return superannuation;
}
public function setSup(superannuation:Number):void {
this.superannuation = superannuation * 0.05;
}
public function getIns():Number {
return insurance;
}
public function setIns(insurance:Number):void {
this.insurance = insurance * 0.1;
}
public function getNet():Number {
return net;
}
public function setNet(net:Number):void {
this.net = grwage - taxes - superannuation - insurance;
}
}
}
只有一些能手和二传手
在我的mxml文件中:
import tax.Calculator;
public var calculate:Calculator = new Calculator();
calculate.setGrwage(1000);
trace(calculate.getTaxes());
trace(calculate.getSup());
trace(calculate.getIns());
trace(calculate.getNet());
当我尝试访问calculate时,访问Undefined属性时出现错误1120。你有什么想法吗
谢谢。我想你把能手和二传手的事情搞混了。如果一个变量依赖于另一个变量,则必须在其getter中写入计算。此变量不应作为私有成员存在,必须始终通过适当的getter访问它 例如:
public function getNet():Number {
return getGrwage() - getTaxes() - getSup() - getIns();
}
因此,在这里,您只需要一个setter(setGrwage),您可以删除其他setter并将计算放入getter中
注意,AS3中有一个更适合setter和getter的方法
class GetSet
{
private var privateProperty:String;
public function get publicAccess():String
{
return privateProperty;
}
public function set publicAccess(setValue:String):void
{
privateProperty = setValue;
}
}
你们班有很多问题。因此,让我们重新设计它
您遇到的主要问题是,在访问VAR之前,您没有启动VAR,因为它们的值为空,flash player会向您抛出该错误。 正如您在构造函数中看到的,我将默认值设置为0,这样它们就永远不会为NULL
package tax {
public class Calculator{
private var _grwage:Number;
private var _taxes:Number;
private var _superannuation:Number;
private var _insurance:Number;
public function Calculator() {
this._grwage = 0;
this._taxes = 0;
this._superannuation = 0;
this._insurance = 0;
}
public function get grwage():Number {
return this._grwage;
}
public function set grwage(val:Number):void {
this._grwage = val;
}
public function get taxes():Number {
return this._taxes;
}
public function set taxes(val:Number):void {
this._taxes = val * 0.2;
}
public function get superannuation():Number {
return this._superannuation;
}
public function set superannuation(val:Number):void {
this._superannuation = val * 0.05;
}
public function get insurance():Number {
return this._insurance;
}
public function set insurance(val:Number):void {
this._insurance = val* 0.1;
}
public function get net():Number {
return this._grwage - this._taxes - this._superannuation - this._insurance;
}
}
}
这里的答案都很好,但都没有抓住要点: 您试图在设置变量之前获取它们 这将抛出一个错误(由于您设置类的方式),因为您在尝试使用它们之前从未调用过
setup()
、setIns()
、和setNet()
虽然您的类可能不是以最好的方式编写的,但它在语法上是合理的
试着在你的接球手之前给每个接球手打电话。我想你会解决你的问题。如果它不使用给定的参数,那么设置税收(税收:数字)有什么意义?它在哪个参数上出错?你能从编译器中粘贴完整的错误吗?我可以看到你的代码在语法上没有什么错误,但是你确实对getter和setter应该做什么有些困惑,只是一些基本的错误,比如getTaxes()返回grwage而不是taxes,setTaxes()和setNet()实际上不是setter;如果要计算和存储结果,应该调用这些calculateTaxes()和calculateNet()。另外,当您运行代码示例时,它将跟踪1000,NaN,NaN,NaN,因为您得到的是尚未设置的内容(只设置了grwage)。谢谢Kodiak,我更改了我的类。但我仍然有实例化的问题。上面写着“1120访问未定义的属性计算”。您发布的代码是否与mxml中的代码一样?您应该将代码(从calculate.setGrwage到末尾)放入事件侦听器(如creationComplete)中。
import tax.Calculator;
public var calculate:Calculator = new Calculator();
//Now due to the fact we are using true setter/getter methods.
calculate.grwage = 1000;
trace( calculate.taxes); // should be 0 as we are defaulting to the initial value
trace( calculate.superannuation );// should be 0 as we are defaulting to the initial value
trace( calculate.insurance );// should be 0 as we are defaulting to the initial value
trace( calculate.net );// should be 1000 as we are defaulting to the initial values of everything but grwage
import tax.Calculator;
public var calculate:Calculator = new Calculator();
calculate.setGrwage(1000);
trace(calculate.getTaxes());
trace(calculate.getSup());
trace(calculate.getIns());
trace(calculate.getNet());