JavaScript 中的 private 和 public 这两个词到底有多保留

Posted

技术标签:

【中文标题】JavaScript 中的 private 和 public 这两个词到底有多保留【英文标题】:Just how reserved are the words private and public in JavaScript 【发布时间】:2011-09-21 11:36:16 【问题描述】:

每次我构建一个 JS 库我都有这样的概念:

(function(window,undefined)
  var LibName = function()
    var privateAPI = 
      method: function()
    ;
    var publicAPI = 
      publicMethod: function()
    ;
    return publicAPI;
  
  window.LibName = LibName;
)();

但我一直渴望只做:

(function(window,undefined)
  var LibName = function()
    var private = 
      method: function()
    ;
    var public = 
      publicMethod: function()
    ;
    return public;
  
  window.LibName = LibName;
)();

但我从来没有这样做过,因为那些是保留字。他们到底有多保守?浏览器会失败吗?在我的测试中,一切似乎都正常,但我是否遗漏了什么?

【问题讨论】:

您错过了重载语言保留字是一个坏主意的概念。 ;> 不是因为它会混淆浏览器,而是因为它会混淆试图阅读或调试代码的人。 而且以后可能会出问题,比如当JS(EcmaScript)决定支持私有变量的时候。 【参考方案1】:

始终假定不正确地使用保留字会导致应用程序失败。

publicprivate 这样的词是future reserved words,所以即使它们现在有效,将来也可能不会。

【讨论】:

实际上,在 ES6 中它们可以作为属性名正常工作。【参考方案2】:

https://developer.mozilla.org/en/javascript/Reference/Reserved_Words

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf 为官方规范。

它们在 7.6.1.2 中被列为“保留供将来使用”。

【讨论】:

【参考方案3】:

我不建议使用私有和公共。但是只有通过“use strict”使用严格模式才会出错:https://developer.mozilla.org/en/JavaScript/Strict_mode

如果你想确定,它会在未来工作,你必须使用括号:

this["private"] = 
  method: function() 

我更喜欢将 var 缩短为“pub”和“priv”。所以我使用这样的模式:

namespace.decorator = function (pub, priv) 
  pub = pub || ;
  priv = priv || ;
  //namespace.decoratorToExtend(pub, priv);
  pub.method = function() alert(pub.prop);
  return pub;

var instance = namespace.decorator(prop:'hello world');
instance.method();

【讨论】:

【参考方案4】:

根据我在 javascript 中使用保留字的经验,代码会出现语法错误之类的错误。

【讨论】:

-1。这不一定是真的。如果不是在严格模式下,您可以使用诸如 public 和 private 之类的关键字,尽管不鼓励这样做。

以上是关于JavaScript 中的 private 和 public 这两个词到底有多保留的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C @protected @private @public @package

[Javascript] Private class properties in Javascript

Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; p

权限控制

Private Members in JavaScript

Java中的访问修饰符