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】:始终假定不正确地使用保留字会导致应用程序失败。
像public
和private
这样的词是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