Actionscript 3 如何引用现有变量而不创建新变量?

Actionscript 3 如何引用现有变量而不创建新变量?,actionscript-3,flash,actionscript,cs3,Actionscript 3,Flash,Actionscript,Cs3,我不知道该怎么问这个问题 我有一个变量 public static var MaxDurabilityTestItem:Number = 3; 我有一个函数 public static function setItemInSlot(Item:String, Slot:Number, MaxDurability:Number = 0) { UI_Taskbar_Inventory.InventoryItems[Slot] = Item; if(M

我不知道该怎么问这个问题

我有一个变量

public static var MaxDurabilityTestItem:Number = 3;
我有一个函数

    public static function setItemInSlot(Item:String, Slot:Number, MaxDurability:Number = 0)
    {
        UI_Taskbar_Inventory.InventoryItems[Slot] = Item;

        if(MaxDurability == 0)
        {
            trace("Before change " + UI_Taskbar_Inventory.InventoryDurability);
            UI_Taskbar_Inventory.InventoryDurability[Slot] = "MaxDurability" + Item;
            trace("After change " + UI_Taskbar_Inventory.InventoryDurability);
        }
        else
        {
            trace("not using default durability");
        }
    }
这个函数中唯一让我头疼的部分就是这一行

UI_Taskbar_Inventory.InventoryDurability[Slot] = "MaxDurability" + Item
它输出

更改前0,0,0,0,0,0,0,0,0

更改0后,MaxDurabilityTestItem为0,0,0,0,0,0

而我希望它输出

更改前0,0,0,0,0,0,0,0,0

更改0,3,0,0,0,0,0,0,0后

我知道这个问题,但我不知道如何解决它
“MaxDurability”+项
生成一个名为
MaxDurabilityTestItem
的字符串,而不是引用我的变量
MaxDurabilityTestItem

如何更改它,使其引用变量MaxDurabilityTestItem,而不是它创建的字符串

“MaxDurability”+项
生成一个名为
MaxDurabilityTestItem
的字符串

因为您使用引号自动定义了一个
“字符串”
。我只能假设
也是带有文本的字符串
“TestItem”
。因此,您只需将两个字符串连接在一起

(二)

…而不是引用我的变量
MaxDurabilityTestItem

试试看:

UI_Taskbar_Inventory.InventoryDurability[Slot] = MaxDurabilityTestItem; //now using your defined variable
编辑

以防万一,您确实想使用字符串作为变量本身的引用:

使用此[“某个变量的名称”]。。。其中,
将以当前类为目标,
[“name”]
将在当前类中找到此类指定变量

尝试:

“MaxDurability”+项
生成一个名为
MaxDurabilityTestItem
的字符串

因为您使用引号自动定义了一个
“字符串”
。我只能假设
也是带有文本的字符串
“TestItem”
。因此,您只需将两个字符串连接在一起

(二)

…而不是引用我的变量
MaxDurabilityTestItem

试试看:

UI_Taskbar_Inventory.InventoryDurability[Slot] = MaxDurabilityTestItem; //now using your defined variable
编辑

以防万一,您确实想使用字符串作为变量本身的引用:

使用此[“某个变量的名称”]。。。其中,
将以当前类为目标,
[“name”]
将在当前类中找到此类指定变量

尝试:


我需要在这里说的第一件事是,尽管下面描述的所有工作都很好,但诉诸此类技术可能表明项目架构存在一些深层次的问题。那么

ActionScript 3的美丑在于,从字面上看,任何东西都是其中的一个对象,你可以这样处理任何实例

任何类实例都是对象。您可以将任何显示对象xy分别命名为['x']和['y']。您可以采用相同的方法处理方法:

function gotoAnd(frame:*, thenPlay:Boolean):void
{
    // Forms 'gotoAndPlay' or 'gotoAndStop' string.
    var methodName = 'gotoAnd' + (thenPlay? 'Play': 'Stop');

    // Gets method reference to either gotoAndPlay or to gotoAndStop.
    var methodItself:Function = this[methodName];

    // Calls method by the reference.
    methodItself(frame);

    // In one line:
    // this['gotoAnd' + (thenPlay? 'Play': 'Stop')](frame);
}
任何类都是对象。微妙的区别在于,作为对象的类的成员是静态类方法和字段。例如:

import flash.system.System;

// Accepts "free" or "private" or "total" as an argument.
function getMemory(value:String = "total"):Number
{
    var propertyName:String;

    switch (value)
    {
        case "private":
            propertyName = "privateMemory";
            break;

        case "free":
            propertyName = "freeMemory";
            break;

        case "total":
            propertyName = "totalMemoryNumber";
            break;

        // Returns -1 for an invalid argument.
        default:
            return -1;
            break;
    }

    // Returns either System.privateMemory
    // or System.freeMemory or System.totalFreeMemory.
    return System[propertyName];
}
同样,静态类方法是作为对象的类的函数成员:

// Direct method access.
System.gc();

// Property-based method access.
System['gc']();

请记住,[]访问仍然尊重私有内部受保护的命名空间,因此如果您无法访问SomeObject.someMethod(),因为该方法标记为私有,您也将无法通过SomeObject['someMethod']访问它。前者会给你一个编译时错误,后者会让你编译你的应用程序,然后让你处理运行时异常。

我需要在这里说的第一件事是,尽管下面描述的一切都很好,诉诸此类技术可能表明项目架构存在一些深层次的问题。那么

ActionScript 3的美丑在于,从字面上看,任何东西都是其中的一个对象,你可以这样处理任何实例

任何类实例都是对象。您可以将任何显示对象xy分别命名为['x']和['y']。您可以采用相同的方法处理方法:

function gotoAnd(frame:*, thenPlay:Boolean):void
{
    // Forms 'gotoAndPlay' or 'gotoAndStop' string.
    var methodName = 'gotoAnd' + (thenPlay? 'Play': 'Stop');

    // Gets method reference to either gotoAndPlay or to gotoAndStop.
    var methodItself:Function = this[methodName];

    // Calls method by the reference.
    methodItself(frame);

    // In one line:
    // this['gotoAnd' + (thenPlay? 'Play': 'Stop')](frame);
}
任何类都是对象。微妙的区别在于,作为对象的类的成员是静态类方法和字段。例如:

import flash.system.System;

// Accepts "free" or "private" or "total" as an argument.
function getMemory(value:String = "total"):Number
{
    var propertyName:String;

    switch (value)
    {
        case "private":
            propertyName = "privateMemory";
            break;

        case "free":
            propertyName = "freeMemory";
            break;

        case "total":
            propertyName = "totalMemoryNumber";
            break;

        // Returns -1 for an invalid argument.
        default:
            return -1;
            break;
    }

    // Returns either System.privateMemory
    // or System.freeMemory or System.totalFreeMemory.
    return System[propertyName];
}
同样,静态类方法是作为对象的类的函数成员:

// Direct method access.
System.gc();

// Property-based method access.
System['gc']();

请记住,[]访问仍然尊重私有内部受保护的命名空间,因此如果您无法访问SomeObject.someMethod(),因为该方法标记为私有,您也将无法通过SomeObject['someMethod']访问它。前者会给你一个编译时错误,后者会让你编译你的应用程序,然后让你处理运行时异常。

静态属性是类的属性。您可以通过类引用来解决它:ClassReference[StaticPropertyName]。如果您的类名是MyClass,那么它将是MyClass['MaxDurabilityTestItem']。为什么
“MaxDurability”+项
?该
项目
是否可能更改?是,项目将更改。此函数用于为项目所在的插槽设置项目的耐久性。@我意识到我的问题已得到回答,但要扩展ClassReference[StaticPropertyName]部分,如何为函数执行此操作?我尝试了ItemHandling[Item+“Effect”];-但是(1)它不起作用,(2)我不知道把括号放在哪里——如果你真的想这样做的话。(本例中函数名为TestItemEffect)@UnAlpha好的,我在下面发布了一些解释。Static属性是类的属性。您可以通过类reference来解决它