Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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中的private和public这个词有多含蓄_Javascript_Oop_Private_Public - Fatal编程技术网

JavaScript中的private和public这个词有多含蓄

JavaScript中的private和public这个词有多含蓄,javascript,oop,private,public,Javascript,Oop,Private,Public,每次构建JS库时,我都有这样的概念: (function(window,undefined){ var LibName = function(){ var privateAPI = { method: function(){} }; var publicAPI = { publicMethod: function(){} }; return publicAPI; } window.LibName = LibName; }

每次构建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;
})();

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

总是假设不正确地使用保留字会导致应用程序失败


public
private
这样的词都是,所以即使它们现在起作用,将来也可能不起作用。

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

对于官方规范


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

我不建议使用私人和公共。但是,只有在“use strict”中使用strict模式时,才会出现错误:

如果您想确定,它将来会起作用,则必须使用括号:

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();

您忽略了一个概念,即重载语言保留字是一个坏主意不是因为它会混淆浏览器,而是因为它会混淆试图阅读或调试代码的人。而且在将来,它可能会导致问题,例如当JS(EcmaScript)决定支持私有变量时。-1。这不一定是真的。如果不是在严格模式下,您可以使用诸如public和private之类的关键字,尽管这是不鼓励的。实际上,在ES6中,它们可以作为属性名使用。