Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该关心JavaScript中的私有成员吗_Javascript - Fatal编程技术网

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

我应该关心JavaScript中的私有成员吗,javascript,Javascript,我知道JavaScript不支持私有成员,但您可以模仿它们。我想知道这是否值得。在JavaScript中使变量和/或函数私有化有什么意义吗?下面是stackOverflow的答案,说明了在您希望的情况下如何做到这一点: 以下是一篇关于签名的文章,其中包含了专家的引述: 另一方面,由于JavaScript没有公共和私有方法的概念,因此没有任何内部方法可以通过简单地对类签名来保护。此外,所有方法都可以在运行时更改,因此必须在运行时进行保护 在JavaScript中,您可以向现有对象添加新属性,或者

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

下面是stackOverflow的答案,说明了在您希望的情况下如何做到这一点:

以下是一篇关于签名的文章,其中包含了专家的引述:

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

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

但是,我可以想象,使用私有变量和方法可能在解析具有相同签名但在不同类中的方法和变量方面有一些功能,或者没有

在JavaScript中使变量和/或函数私有有意义吗

我会说“不”。。。“不”的语言不仅仅是JavaScript

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

在Java环境中,从理论上讲,您可能编写一个类来为沙盒方(如小程序)提供对资源的有限访问。在这种情况下,您不希望applet代码能够干扰私有成员,因为它可能会超出安全边界

但在JavaScript中,这是不可能的。每个主机都有一个安全上下文:端口,不能创建有效的安全边界来限制共享上下文的代码。当任何JS代码都可以完全接管页面的UI时,隐藏变量的能力是毫无意义的。(另外,一些浏览器偶尔也会有一些无法使用私有变量的功能,例如Mozilla的旧版本,现在已经被删除了
\uuuuuu调用者\uuuuu


相反,请考虑Python的方式:为有效私有设置一个约定,即使该语言没有强制执行它。在成员名称的开头加下划线足以警告类用户不应干扰该成员,但在调试或原型设计时,不要让自己成为一堆烦人的额外工作,需要暂时忽略私密性。

请参阅我对这个问题的看法……私密性变量和封装的目的不是为了安全,也不是为了防止邪恶的人。这是抽象的。外部实体不需要知道内部是如何完成的。界面的占用空间越小,消费者理解的复杂性就越低。公开的内容不应超过利用该功能所需的内容。