JavaScript中的属性别名
因此,我有一个属性,我想使别名的JavaScript中的属性别名,javascript,Javascript,因此,我有一个属性,我想使别名的 var default_commands = {} default_commands['foo'] = "bar"; 然后我想把一堆东西化名为“foo” 所以如果我想 default_commands['fu'] = default_commands['foo']; default_commands['fuu'] = default_commands['foo']; 我怎么能做到这一点,这样我就不用把这些都写出来了 我试过: default_commands
var default_commands = {}
default_commands['foo'] = "bar";
然后我想把一堆东西化名为“foo”
所以如果我想
default_commands['fu'] = default_commands['foo'];
default_commands['fuu'] = default_commands['foo'];
我怎么能做到这一点,这样我就不用把这些都写出来了
我试过:
default_commands['fu','fuu'] = default_commands['foo'];
但这似乎不起作用
["fu", "fuu"].forEach(function (alias) {
default_commands[alias] = default_commands.foo;
});
这不是word通常调用的“别名”:
default_commands.fu = 5;
console.log(default_commands.foo); // still "bar", not 5.
但不清楚你的问题是什么意思。你可以这样做
default_commands['fu'] = default_commands['fuu'] = default_commands['foo'];
可能是最灵活的解决方案:
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);
为什么这样更灵活?读和写将正确地“传播”。在javascript中真正使用别名的唯一方法是使用对象 在类似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
不能为字符串、数字、布尔值等创建别名
例如:
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)都被视为对象。您考虑得太多了。
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]);
这样写起来就不那么痛苦了这似乎让它变得更痛苦了complicated@mcgrailm:我彻底更改了我的解决方案。这看起来正符合我的要求