使用ASC2.0编译器创建对象时使用的动态密钥

问题描述:

对于我来说,总是有点刺激(我在Python中也做了一些编码,处理字典/对象类型的方式更清晰,更好),但在此之前ASC2.0,我总是能够避开它,使用ASC2.0编译器创建对象时使用的动态密钥

var fooS:String = 'foo'; 
var barO:Object = { ('' + fooS): 'bar' }; 
for (var key:String in barO) 
    { 
     trace(key, barO[key]); 
    } 

(打印“富巴”)

但试图做的是,在ASC2。 0导致一个

'(' is not allowed here 

错误。

任何想法?

我知道,我总是可以设置通过方括号访问动态变量的关键,但任何时候,我需要做的

var fooS:String = 'foo'; 
var a:Object = {}; 
a[fooS] = 'bar'; 

我觉得相当矫枉过正和浪费。

+0

较少的字符是矫枉过正和浪费?你怎么这么喜欢肮脏的(''+)语法? – Kodiak 2013-04-29 12:14:09

+0

哦,不,我肯定不喜欢(''+)语法,我更喜欢as3把{myvar:“1”}当作一个对象,它有一个关键字,不管变量myvar包含什么,遗憾的是没办法做到这一点。 最大的烦恼是当设置一个对象的键在一个函数内。使用ASC2.0,没有一种方法可以在对象中设置变量的值。我更喜欢肮脏的语法,根本无法做到这一点。 – seaders 2013-04-30 12:02:13

AS3符合ECMA第4版。 在这个版本中没有“内联”的方式来生成密钥。 正如你所说,只有下面的代码可用于:

var object:Object = {}; 
object['some' + 'dynamic' + 'key'] = 'some value'; 

唯一的选择是创建自己的API,也许是这样的:

var map:Map = new Map().put('some' + 'dynamic' + 'key', 'some value'); 

其中Map.put()返回“这”