【问题标题】:Mocking private scope identifier with eval使用 eval 模拟私有范围标识符
【发布时间】:2014-06-13 21:33:35
【问题描述】:

在为多人游戏编写服务器应用程序时,我想到了一些清理代码的想法。

我在我的应用程序中大量使用Module Pattern,并使用约定来调用公开函数public[Function name] 和私有函数private[Function name]public 前缀有助于返回分配:

return {
    get : publicGet
}

但是私有标识符名称只是为了展示,使调用它们有点麻烦。但是,完全删除 private 前缀会使代码的可读性降低。所以我想像在 Java 中那样使用保留的 private 关键字。

为此,我想我可以像这样使用eval

var private = eval('') // Just an empty assignment so it does nothing.

所以我可以这样写我的私有函数:

private function initiateGameMatchmaker(game) {
    // Code...
}

代替:

function privateInitiateGameMatchmaker(game) {
    // Code...
}

这是可以接受的,还是您认为这是一种肮脏的黑客行为,因此是绝对的禁忌?

【问题讨论】:

  • 你试过了吗?它实际上不起作用。只需使用约定并坚持下去。也许_initiateGameMatchmaker.
  • 接受与否,都行不通。 private 将是 undefinedprivare function foo(){} 将抛出 SyntaxError: Unexpected token function
  • 我的错,我以为我可以让它工作,但我运行的是一个过时的版本。我稍后会删除这个问题。
  • 不要删除问题。以这种方式可能无法做到这一点,但这仍然是一个有效的问题。如果有人寻找这样的问题,“不,这不可能” 比根本没有答案更好。
  • 那我就不说了,谢谢。

标签: javascript node.js module scope eval


【解决方案1】:

接受与否,都行不通。

private 将是 undefinedprivate function foo(){} 将抛出 SyntaxError: Unexpected token function

不要试图将 JavaScript 塑造成它不是语言的约定。

【讨论】:

  • 公司尝试将其塑造成 OO 实践是很正常的,尽管我强烈反对,但我认为这将是一种符合公司期望的好方法。正如另一条评论中提到的:我没有注意到我正在运行一个过时的版本,所以我认为它有效。对此普遍接受的约定是什么?
  • CrockfordJSLint 在涉及约定时经常被提及。但这是您要遵循的偏好问题。对于私有变量/函数,我相信下划线前缀 (_myPrivateVar / function _myPrivateFunction(){}) 是最常见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多