我是一个名为Duckuino的项目的合作者,模块中加载了eval()来执行另一个文件的内容,该文件的内部带有new Object(),并且我想为项目创建别名,以避免像这样重复两次代码:

new Object({
  commands: {
    aVeryComplexCommand: function(WithParams) {
      // Complex content
    },
    anAliasForTheCommand: //something which point to 'aVeryComplexCommand'
  }
});


请注意,我不能将代码放在new Object()声明之后,因为它可能被eval()误解,并且我不想修改加载模块的代码,因为别名是特定于模块的。

预先感谢!

编辑:Pointy和Nathan P.的答案都在起作用,所以我将与其他协作者讨论该问题,并将使我们使用的答案有效。

最佳答案

您必须使用单独的语句:

new Object(function() {
  var obj = {
    commands: {
      aComplexCommand: { ... }
    }
  };
  obj.commands.alias = obj.commands.aComplexCommand;
  return obj;
}());


那是有效的JavaScript,但是我不能说这是否会混淆您的eval()机制。

10-05 21:06
查看更多