Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.12.2011, 14:57
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Паттерны и приемы!
Общеизвестный прием запаковывания данных в скоп:

(function(){
  var cache = {};
  
  this.nya = function nya (str){
    cache = {}
  };
})();


создастся функция НЯ и в ней доступен cache , из вне он не доступен.

Какие приемы запаковывания, заворачивания вы еще знаете?) Какие еще прикольные приемы знаете, например как ускорить код и.т.п. Давайте обменяемся опытом)
Ответить с цитированием
  #2 (permalink)  
Старый 28.12.2011, 15:29
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

прочитай книгу Javascript Patterns от Стояна Стефанова.

пара примеров кода "запаковки"

window.nya = new function(){
    var cache = {};
    this.getCache = function(){
        return cache;
    };
};


вот этот меня поразил, когда я его увидел в первый раз :
({
    css : function(el, prop){
        /*return css-prop*/
    },
    ajax : function(options){
        /*make ajax-request*/
    },
    init : function(name){
        var cache = {};
        this.getCache = function(){ return cache };

        delete this.init;
        window[name] = this;
    }
}).init("myToolbox");

myToolbox.ajax({ url : "foo", async : true }); //ajax-req.
myToolBox.css(document.body, "width"); // some width
myToolbox.getCache(); // {}
typeof myToolbox.cache // undefined.
typeof myToolbox.init // undefined.
Ответить с цитированием
  #3 (permalink)  
Старый 28.12.2011, 15:34
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

window.nya = new function(){
    var cache = {};
    this.getCache = function(){
        return cache;
    };
};


вот тут не понял, чем отличается cache от getCache ? какая разница чем GO засирать? можешь наглядный пример кинуть с этим?
Ответить с цитированием
  #4 (permalink)  
Старый 28.12.2011, 15:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

window.nya = new function(){
    var cache = {};
    this.getCache = function(){
        return cache;
    };
};

alert([ typeof nya.getCache(), typeof nya.cache, typeof cache ]); // obj, undef, undef.
Ответить с цитированием
  #5 (permalink)  
Старый 28.12.2011, 15:54
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от melky Посмотреть сообщение
window.nya = new function(){
    var cache = {};
    this.getCache = function(){
        return cache;
    };
};

alert([ typeof nya.getCache(), typeof nya.cache, typeof cache ]); // obj, undef, undef.
ээм. так я всегда так делаю))) ну обьвляю в конструкторе переменные, потом обращаюсь к ним из методов обьекта который конструирую)))
крута значит я все правильно делаю))
Ответить с цитированием
  #6 (permalink)  
Старый 28.12.2011, 15:54
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Сообщение от melky
вот этот меня поразил, когда я его увидел в первый раз :
Это интересно! Практический эффект тот же, что и от первого варианта, но интереснее.
Ответить с цитированием
  #7 (permalink)  
Старый 28.12.2011, 15:57
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от GuardCat Посмотреть сообщение
Это интересно! Практический эффект тот же, что и от первого варианта, но интереснее.
и код понятнее, если кол-во функций типа ajax и css увеличить.

единственная загвоздка - в методе init
Ответить с цитированием
  #8 (permalink)  
Старый 28.12.2011, 15:59
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Сообщение от melky
и код понятнее, если кол-во функций типа ajax и css увеличить.
Да, тоже об этом подумал.
Сообщение от melky
единственная загвоздка - в методе init
А в чём загвоздка? Свойство-камикадзе не есть хорошо?
Ответить с цитированием
  #9 (permalink)  
Старый 28.12.2011, 16:01
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от GuardCat Посмотреть сообщение
А в чём загвоздка? Свойство-камикадзе не есть хорошо?
Вообще-то, это ЕСТЬ хорошо)! нахрена нам инициализировать объект несколько раз? наоборот, инициализировали - убрали инициализатор чтобы не засорял
Ответить с цитированием
  #10 (permalink)  
Старый 28.12.2011, 16:16
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от GuardCat
Свойство-камикадзе не есть хорошо?
+1
Зачем создавать метод, который будет вызван всего один раз (а потом ещё и самоликвидируется)? Лучше сразу сделать анонимную функцию, которая будет собирать и возвращать объект.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паттерны проектирования kobezzza Оффтопик 9 22.07.2011 00:43