Суть в том, что нет классов в javascript .Тебе нужно жить без них.Вы можете только эмулировать некоторые их характеристики .
Ключевое слово this
в javascript относится к объекту, который вызвал функцию.Если это функция в глобальном объекте, this
будет ссылаться на window
.Если это constructor function
, и вы вызываете его с ключевым словом new
, this
будет ссылаться на текущий экземпляр.
Есть простая вещь, которую вы можете сделать, если хотите сохранить oA
public и доступ к ней из приватной функции.
// i = inner, o = outer, f=function, a=attribute
var singleton = (function() {
// public interface
var pub = {
oF: function() {
this.oA = true;
return iF();
},
oA: false
};
// private function
var iF = function() {
return pub.oA; // returns public oA variable
}
// return public interface
return pub;
})();
Обратите внимание, что я завернул всю единственную функцию в паранах .Причина, по которой это соглашение настолько популярно, заключается в том, что помогает узнать, будет ли функция выполняться немедленно (как в этом случае).Представьте себе, если ваша функция становится больше , и когда вы смотрите на код, не будет очевидным , если singleton - это функция или объект, который возвращает самовозбуждающаяся функция.Однако, если у вас есть парены, очевидно, что функция синглтона будет возвращена функцией немедленно.