Насколько защищены слова 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, код выдаст ошибку с синтаксической ошибкой.