如何在对象内联定义中复制项目?

时间:2017-10-06 14:28:26

标签: javascript modularity

我是一个名为Duckuino的项目的合作者,模块加载了一个eval()执行另一个文件的内容,里面有new Object(),我想为项目创建别名,避免重复代码两次,如:

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

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

先谢谢!

编辑: Pointy和Nathan P.的答案都有效,所以我将与其他合作者讨论这个问题,我会对我们使用的答案有效。

2 个答案:

答案 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');