Насколько защищены слова private и public в JavaScript

Каждый раз, когда я собираю библиотеку 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;
})();

Но я никогда этого не делал, потому что это зарезервированные слова. Насколько они защищены? Будет ли сбой браузера? В моем тестировании все, кажется, работает, но я что-то упустил?

4 ответа

Решение

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 как "зарезервированные для будущего использования".

Всегда предполагайте, что неправильное использование зарезервированных слов приведет к сбою приложения.

Слова как public а также private являются зарезервированными словами в будущем, поэтому, даже если они работают сейчас, возможно, не в будущем.

Я бы не рекомендовал использовать частный и публичный. Но вы получите ошибку только при использовании строгого режима со словом "использовать строгий": 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();

Из того, что я испытал с зарезервированными словами в javascript, код выдаст ошибку с синтаксической ошибкой.

Другие вопросы по тегам