Я использую подход, найденный на сайте Enterprise jQuery :
Вот их пример, показывающий, как объявлять частные и публичные свойства и функции. Все делается как самовыполняющаяся анонимная функция.
(function( skillet, $, undefined ) {
//Private Property
var isHot = true;
//Public Property
skillet.ingredient = "Bacon Strips";
//Public Method
skillet.fry = function() {
var oliveOil;
addItem( "\t\n Butter \n\t" );
addItem( oliveOil );
console.log( "Frying " + skillet.ingredient );
};
//Private Method
function addItem( item ) {
if ( item !== undefined ) {
console.log( "Adding " + $.trim(item) );
}
}
}( window.skillet = window.skillet || {}, jQuery ));
Так что, если вы хотите получить доступ к одному из публичных участников, вы просто должны пойти skillet.fry()
или skillet.ingredients
.
Что действительно здорово, так это то, что теперь вы можете расширять пространство имен, используя точно такой же синтаксис.
//Adding new Functionality to the skillet
(function( skillet, $, undefined ) {
//Private Property
var amountOfGrease = "1 Cup";
//Public Method
skillet.toString = function() {
console.log( skillet.quantity + " " +
skillet.ingredient + " & " +
amountOfGrease + " of Grease" );
console.log( isHot ? "Hot" : "Cold" );
};
}( window.skillet = window.skillet || {}, jQuery ));
Третий undefined
аргумент
Третий аргумент undefined
является источником переменной со значением undefined
. Я не уверен, что это все еще актуально сегодня, но, работая со старыми стандартами браузеров / JavaScript (ecmascript 5, javascript <1.8.5 ~ firefox 4), переменная global-scope <code>undefined доступна для записи, поэтому любой может переписать ее значение. Третий аргумент (если не передано значение) создает переменную с именем undefined
, которая ограничена пространством имен / функцией. Поскольку при создании пространства имен не было передано никакого значения, по умолчанию используется значение undefined
.