2011-12-08 44 views
4

所以我有一个属性,我想让别名的。属性别名在JavaScript中

var default_commands = {} 
default_commands['foo'] = "bar"; 

然后我想“富”

所以,如果我想

default_commands['fu'] = default_commands['foo']; 
default_commands['fuu'] = default_commands['foo']; 

我怎么能做到这一点,所以我不必所有的写一堆物品别名出

我想:

default_commands['fu','fuu'] = default_commands['foo']; 

但这似乎并不奏效。

回答

4
["fu", "fuu"].forEach(function (alias) { 
    default_commands[alias] = default_commands.foo; 
}); 

这会不会是在这个意义上,通常这个词调用一个“别名”:

default_commands.fu = 5; 
console.log(default_commands.foo); // still "bar", not 5. 

但并不清楚你在你的问题是什么意思。

+0

这看起来像是在做什么,我想 – mcgrailm

0

你可以做到这一点

default_commands['fu'] = default_commands['fuu'] = default_commands['foo']; 
+0

,只有轻微的痛苦少写 – mcgrailm

0

解决方案,也可能是最灵活:

function unalias (str) { 
    // Use whatever logic you want to unalias the string. 
    // One possible solution: 
    var aliases = { "fu": "foo", "fuu": "foo" }; 
    return aliases[str] !== undefined ? aliases[str] : str; 
} 

default_commands[unalias("fu")] = 7; 
default_commands[unalias("fuu")] = default_commands[unalias("foo")] + 3; 
alert(default_commands.foo); 

这是为什么更灵活?读取和写入将“正确传播”。

+0

这似乎是它使问题更加复杂 – mcgrailm

+0

@mcgrailm:我极大地改变了我的解决方案。 –

0

在JavaScript中真正使用别名的唯一方法是使用对象。

的对象accesed在JS像指针:

例子:

var myobj = {hello: "world"}; 
var myalias = myobj; 

myobj.hello = "goodbye"; 

console.log(myobj.hello); => // "goodbye" 
console.log(myalias.hello); => // "goodbye" 

你不能让一个别名字符串,数字,布尔等。

例子:

var myint = 1; 
var myalias = myint; 

myint = 2; 

console.log(myint); => // 2 
console.log(myalias); => // 1 

PD:除Int,String,Boolean,null和undefined之外的所有类型(如Array或RegExp)被视为对象。

0

你在想这件事。

var foo="foo",fu=foo,fuu=foo,default_commands = {}; 

default_commands[foo] = "bar"; console.log(default_commands[foo]); 
default_commands[fu] = "baz"; console.log(default_commands[foo]); 
default_commands[fuu] = "bing"; console.log(default_commands[foo]);