Основна концепція модуля виявлення полягає в тому, що у вас є файл, Objectякий інкапсулює його дані та поведінку:
var Module = (function(){
var privateStuff = {};
var publicStuff = {};
return publicStuff;
})();
Однак є кілька найкращих практик, які слід використовувати, використовуючи цей шаблон. Ось модуль (" Modulus") з деякими властивостями для демонстрації, який використовує деякі з цих практик:
function AbstractSomeClass(id) {
this.id = id;
return this;
}
var Modulus = (new (function SomeClass() {
var thus = this;
function NameClass(name){
this.value = thus.name || name;
}
AbstractSomeClass.call(this, 998);
this.name = 'Touring';
this.name = ( new NameClass('Hofstadter') ).value;
return {
id: this.id,
name: this.name
};
})());
Зверніть увагу на (new (function SomeClass(){ ... })());синтаксис. Використання newподібного дозволяє вам використовувати thisключове слово всередині закриття. Це зручно, якщо вам потрібно успадкувати властивості з іншого класу ( AbstractSomeClass.call(this, 998);) - Однак вам все одно доведеться розкрити властивості, які ви хотіли б мати загальнодоступними, наприклад:
return {
id: this.id,
name: this.name
};
Також зверніть увагу , що ми відносимо thisдо thus- що дозволяє використовувати батьківський , thisвсередині підкласу , який має свою власну thisсферу ( this.value = thus.name || name;)
Ще раз, це лише декілька запропонованих конвенцій та найкращих практик.