我应该关心JavaScript中的私人成员吗?

时间:2010-10-03 11:21:28

标签: javascript

我知道JavaScript不支持私有成员,但您可以模仿它们。我想知道这是否值得。在JavaScript中将变量和/或函数设为私有是否有意义?

2 个答案:

答案 0 :(得分:2)

  

在JavaScript中将变量和/或函数设为私有是否有意义?

我认为'不'......和'不'在更多语言中而不仅仅是JavaScript。

信息隐藏和封装都非常值得称赞,但除非您的应用程序中有安全边界,否则实际上并不需要强制实施具有严格语言级限制的私有性。谁是您不保护代码的不受信任的攻击者?自己呢?你团队中的其他人?

在Java环境中,理论上您可能正在编写一个类,以便对像applet这样的沙盒派对提供对资源的有限访问。在这种情况下,您不希望applet代码能够与私有成员混淆,因为它可能会超越安全边界。

但在JavaScript中这是不可能的。每个host:port都会获得一个安全上下文,并且无法创建有效的安全边界来限制共享上下文的代码。当任何JS代码可以完全接管页面的UI时,隐藏变量的能力是毫无意义的。 (另外,有些浏览器偶尔会遇到破坏私有变量的功能,例如Mozilla的旧版本,现已删除__caller__。)

考虑使用Python的方式:有一个有效私有的约定,即使语言没有强制执行它。在成员名称的开头加上下划线足以警告类用户不应该弄乱该成员,但是当你进行调试或原型设计并且需要暂时忽略时,不要让自己厌倦额外的工作私密性。

答案 1 :(得分:0)

以下是关于 如何在需要的情况下执行此操作的stackOverflow答案:

JavaScript private methods

这是一篇关于签名的文章,其中包括专家的引用:

'另一方面,因为JavaScript没有公共和私有方法的概念,所以没有内部方法可以通过简单地签署类来保护。此外,所有方法都可以在运行时更改,因此必须在运行时进行保护。

在JavaScript中,您可以向现有对象添加新属性,或在运行时替换现有属性(包括方法)。你不能用Java做到这一点。因此,再一次,Java中自动保护必须在JavaScript中单独处理。'

中的文章

http://docs.sun.com/source/816-6409-10/sec.htm

但是,我认为使用私有变量和方法可能在解析具有相同签名但是在不同类中的方法和变量方面有一些功能吗?