Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Использование namespace


Автор: Burrr 26.7.2007, 18:48
С целью избежания совпадения имён используемых функций, да и для более здравого подхода решил использовать namespace. Хочу посоветоваться с профами, правилен ли такой подход в JavaScript-ОП или я всё-таки чего-то недопонял:
Код
var imgpre = { // Namespace
    archive : {},
    getObject : function(id) {
        if (typeof this.archive[id] == "undefined") {
            this.archive[id] = new this.previewList(id);
        }
        return this.archive[id];
    }
};

imgpre.previewList = function(id) { // Constructor
    this.id = id;
}

imgpre.previewList.prototype = { // Prototype
    init : function() {
        alert(this.id);
    }
}


Инициализация в HTML-коде происходит с помощью imgpre.getObject('idSTR').init();
Что скажете, посоветует?

Автор: Zeroglif 26.7.2007, 19:28
Цитата(Burrr @  26.7.2007,  18:48 Найти цитируемый пост)
правилен ли такой подход в JavaScript

Правилен. Дополнительно к этому можно оградить себя от глобального контекста, поместив исполняемый код в одну большую функцию. Это удобно, когда приходится объявлять много вспомогательных переменных...

Автор: Burrr 27.7.2007, 10:02
Цитата
Дополнительно к этому можно оградить себя от глобального контекста, поместив исполняемый код в одну большую функцию. Это удобно, когда приходится объявлять много вспомогательных переменных... 



Zeroglif, для этого я буду использовать конструктор, в котором объявлю большинство необходимых мне переменных, как свойства объекта, избежав таким образом использование глобальных переменных. Ты об этом?

Автор: Zeroglif 27.7.2007, 10:44
Burrr, 

ты можешь весь код загнать в функцию, это даст дополнительную возможность безопасно объявлять переменные и декларировать функции. Если, конечно, они нужны:

Код

var Burrr = function() {
    //-> private variable
    var x = ' medved';
    //-> private function declaration
    function f() {
        return x;
    }
    //-> interface
    return { 
       m : function() { return (this.p + f()); }, 
       p : 'preved'
    }; 
}();

Burrr.m(); //-> preved medved


p.s. Ещё один плюс - это возможность несколько сократить код, http://forum.vingrad.ru/index.php?showtopic=120066&view=findpost&p=1210351

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)