2011-12-08 78 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]);