Используется процедурный подход. Я же за ООП, как за средство эффективного снижения сложности.
Ближе к делу.
Поиск по данной теме сразу же привел меня на сайт Дугласа Крокфорда (см. раздел по JavaScript). Не буду пересказывать - очень советую прочесть его статьи по JavaScript - лучшее что я читал за последнее время.
Теперь поделюсь примерами из собственного опыта.
Пространства имен - то, к чему я очень привык, разрабатывая на C++, и особенно на C#.
var Namespace1 = Namespace1 || {}; Namespace1.Namespace2 = Namespace1.Namespace2 || {};
Приватные поля - то, без чего вообще жить нельзя.
Namespace1.Namespace2.Cat = function (name_) { var name = name_; this.getName = function () { return name; }; }; Namespace1.Namespace2.Cat.prototype.Meow = function () { alert(this.getName() + " says: meow!"); };
Теперь, если выполнить код:
var cat = new Cat("Bluetooth"); cat.name = "WiFi"; cat.Meow();
То "кот промяукает": "Bluetooth says: meow!", но не "WiFi says: meow!".
На этом пока все, в продолжении обязательно расскажу как я реализую наследование.
На пайконе отлично заметили, что большинство людей сейчас не программируют на JS, а его /используют/.
ОтветитьУдалитьНо это лирика. А вот когда ты делаешь
cat.name = "WiFi";
то не является ли ожидаемым поведением мяуканье кота именно с новым именем?
А то кота переименовали, а он все по-старому мяукает...
Тут скорее cat.setName("WiFi") (если такой сеттер был бы).
ОтветитьУдалитьВся фишка в том, чтобы защитить поле, реализовать инкапсуляцию. Плюс сеттеры-геттеры полезны, если нужна дополнительная логика, а не просто присваивание.
Безусловно, для такого просто юз кейса (как в примере) можно было просто открыть переменную, но смысл был показать инкапсуляцию в действии, и пример был выбран попроще и без заморочек.