Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.07.2014, 16:39
Новичок на форуме
Отправить личное сообщение для GlaIZier Посмотреть профиль Найти все сообщения от GlaIZier
 
Регистрация: 14.03.2014
Сообщений: 8

Best practice ООП в JS
Здравствуйте, форумчане!

Пишу на JS не очень давно. В основном пишу на Java, поэтому нубовский вопрос. Как правильно организовывать код в JS, если ты хочешь сделать нечто похожее на класс? Есть best practice?

И еще. До этого писал так:

var Class = {};
 
 var Class._args = {}; // private
 
 Class.init = function(Args) { // "constructor"
    _args = Args;
 }

 Class.helloWorld = function() {  // api for Сlass
     alert(_args[0]);
 }

var obj = Object(Class);


А сейчас наткнулся на такой вариант:
var Class= Class || (function(){
    var _args = {}; // private

    return {
        init : function(Args) {
            _args = Args;
            // some other initialising
        },
        helloWorld : function() {
            alert('Hello World! -' + _args[0]);
        }
    };
}());


Не совсем понимаю, в чем между ними принципиальная разница? Зачем городить еще одну функцию "поверх" всего объекта?

Спасибо большое!


UPD.

Кажется понял... Во втором случае используется замыкание и извне _args не видна.

Последний раз редактировалось GlaIZier, 03.07.2014 в 16:57. Причина: Частично нашел ответ.
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2014, 17:10
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от GlaIZier
Есть best practice?
Нет. Есть куча велосипедов, "мнений" как надо и пр. Наиболее адекватный вариант: использовать то ООП, которое предусмотренно языком. Т.е. на прототипах.
Сообщение от GlaIZier
var obj = Object(Class);
Эта строчка - неправильная. Потому что делает не то, что задумано. Инстанцированием тут и не пахнет:
var Class = {};
var instance = Object(Class); // то же, что и var instance = Class;

instance.foo = "bar";

alert(Class.foo);

Сообщение от GlaIZier
Кажется понял... Во втором случае используется замыкание и извне _args не видна.
Ну да, суть именно в этом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операционная Система на JS Icat Общие вопросы Javascript 3 17.04.2018 22:54
Вывыод контента через JS inet_boy Элементы интерфейса 0 18.11.2013 03:00
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Вставка кода js с помощью js Alice Общие вопросы Javascript 1 12.06.2013 19:05
немного ООП на JS Nightmare Общие вопросы Javascript 6 11.09.2011 20:50