AS3 1120实例化时出错
我正在尝试在AS3中创建基本功能。AS3 1120实例化时出错
我有这样一个类:
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;
}
}
}
只是一些getter和setter。
在我的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());
我得到一个错误1120访问undefinded财产时,我尝试访问计算。你有什么想法?
谢谢。
我想你在吸气者和安装者之间混合了一些东西。如果一个变量依赖于另一个变量,则必须将计算结果写入其吸气器中。这个变量不应该作为私有成员存在,并且访问它必须始终通过适当的getter来完成。
例如:
public function getNet():Number {
return getGrwage() - getTaxes() - getSup() - getIns();
}
所以在这里,你只需要一个二传手(setGrwage),你可以删除那些人,把计算的干将。
请注意,对于AS3中的setter和getter,有一个更合适的syntax。
class GetSet
{
private var privateProperty:String;
public function get publicAccess():String
{
return privateProperty;
}
public function set publicAccess(setValue:String):void
{
privateProperty = setValue;
}
}
谢谢科迪亚克,我改变了我的班级。但是我仍然遇到实例化的问题。它说“1120访问未发现财产计算”。 – Chrisissorry 2011-04-12 15:42:44
您发布的代码是否在您的mxml中?您应该将代码(从calculate.setGrwage开始)放入事件侦听器(如creationComplete)中。 – Kodiak 2011-04-12 16:01:35
您的班级有多个问题。因此让我们重新设计它
您遇到的主要问题是您在访问它们之前没有启动变量,因为它们有一个NULL值,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;
}
}
}
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());
这将抛出一个错误(因为你已经设置了类的方式),因为你永远不试图使用他们之前叫setSup()
,setIns()
和setNet()
。
虽然你的课程可能不是以最好的方式书写,但它在语法上是合理的。
尝试在你的获得者之前调用每个setter。我想你会解决你的问题。
什么的'setTaxes点(税:号码)'如果不使用给定的参数? – Kodiak 2011-04-12 12:58:56
究竟是哪一个呢?你能从编译器中粘贴完整的错误吗? – Chris 2011-04-12 13:04:01
你可以看到你的代码在语法上没有任何错误,但你对getter和setter应该做什么有一些困惑,并且只是像getTaxes()返回grwage而不是税的基本错误,setTaxes()和setNet()实际上不是制定者;如果它们用于计算和存储结果,则应该调用calculateTaxes()和calculateNet()。另外,你的代码示例会在你运行时跟踪1000,NaN,NaN,NaN,因为你得到的东西没有被设置(只有grwage被设置)。 – 2011-04-12 13:38:18