Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 AS3 1120实例化时出错_Actionscript 3_Class - Fatal编程技术网

Actionscript 3 AS3 1120实例化时出错

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;

我试图在AS3中创建一个基本功能

我有一门课是这样的:

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());