Пространство имён в Javascript-коде 2
Прочитав заметку об использовании пространств имён в Javascript коде мне захотелось поделиться подходом, который использую я. Он изобретён не мной, конечно, но, возможно кто-то о нём не знает. Этот подход отличается от предложенных в той статье тем, что позволяет кроме функций и данных видимых снаружи, также определять данные и функции локальные для пространства имен и невидимые снаружи.
Код выглядит следующим образом:
App = function() { // public data var FooMember = 3; // public function function foo() { // use private data alert(_FooMember); // call private function _foo(); } // private data var _FooMember = 4; // private function function _foo() { } return { FooMember: FooMember, foo: foo } }();
Использование данного кода очевидно:
alert(App.FooMember); App.foo();
Раз уж речь пошла о пространствах имен, упомяну заодно и технику имитации enumeration в Javascript. Вместо написания кода типа:
var STORY_NEW = 1; var STORY_UPDATE = 2; var STORY_DELETE = 3; .......... switch (tag) { case STORY_NEW: ...; break; case STORY_UPDATE: ...; break; case STORY_DELETE: ...; break; ... }
можно написать следующее:
var StoryAction = { New: 1, Update: 2, Delete: 3, .... }; ... switch (tag) { case StoryAction.New: ...; break; case StoryAction.Update: ...; break; case StoryAction.Delete: ...; break; ... }
Надеюсь, что эти два приёма кому-то покажутся полезными.