我是一个名为Duckuino的项目的合作者,模块加载了一个eval()
执行另一个文件的内容,里面有new Object()
,我想为项目创建别名,避免重复代码两次,如:
new Object({
commands: {
aVeryComplexCommand: function(WithParams) {
// Complex content
},
anAliasForTheCommand: //something which point to 'aVeryComplexCommand'
}
});
请注意,我不能在new Object()
声明之后放置代码,因为它可能会被eval()
误解,我不想修改加载模块的代码,因为别名是模块特异性。
先谢谢!
编辑: Pointy和Nathan P.的答案都有效,所以我将与其他合作者讨论这个问题,我会对我们使用的答案有效。
答案 0 :(得分:3)
您必须使用单独的声明:
new Object(function() {
var obj = {
commands: {
aComplexCommand: { ... }
}
};
obj.commands.alias = obj.commands.aComplexCommand;
return obj;
}());
这是有效的JavaScript,但这是否会混淆我不能说的eval()
机制。
答案 1 :(得分:1)
也许你可以使用类似代理的功能做这样的事情:
var o = new Object({
commands: {
aVeryComplexCommand: function(With, Params) {
console.log('This is complex !', With, Params);
},
anAliasForTheCommand: function() {
var args = [].slice.call(arguments);
return this.aVeryComplexCommand.apply(this, args);
}
}
});
o.commands.anAliasForTheCommand('hello', 'world');