2014-01-30 2 views
1

При использовании шаблона module-esq, позволяющего связывать методы, как долго возвращаемые объекты задерживаются до сбора мусора? Мне очень нравится, как jquery позволяет использовать методы цепочки, но я обеспокоен тем, что он загрязнит память страницы большим количеством ненужных объектов, если я использую шаблон для моего кода.жизненный цикл объекта, возвращаемого функцией

вот простой пример

(function(){ 
    // persistant variable wrapped in a closure 
    var prop = 'something'; 

    //module function 
    function house(){ 
     function method1(){ 
      console.log(prop); 
      return this; 
     } 
     function method2(value){ 
      prop = value 
      return this; 
     } 
     return { 
      getProp: method1, 
      setProp: method2 
     } 
    } 
    window.house = house; 
})(); 

/* 
* I am wanting to know how long the returned object will last in memory 
*/ 

house().setProp('somethingElse'); 

Вот более реальный пример:

(function(){ 
    // object cache to store all the elem id's that have been called 
    var _elemIds = {}; 

    function get(elem){ 

     if(!_elemIds[elem]){ 
      // add to _elemIds object if doesn't exist 
      _elemIds[elem] = document.getElementById(elem); 
     } 

     var _currentElem = _elemIds[elem]; 

     // set a css property using a json object, or get with a string 
     function css(){ 
      if(typeof arguments[0] === 'object'){ 
       for(x in arguments[0]){ 
        _currentElem.style[x] = arguments[0][x]; 
       } 
       return this; 
      } 
      else if(typeof arguments[0] === 'string'){ 
       var l = arguments.length; 
       // if more than one argument return an array 
       if(l > 1){ 
        var ret = []; 
        for (var i = 0; i < l; i++) { 
         if(_currentElem.style[arguments[0]] !== ''){ 
          ret.push(_currentElem.style[arguments[i]]); 
         } else { 
          ret.push(window.getComputedStyle(_currentElem, null)[arguments[i]]); 
         } 
        } 
        return ret; 
       } else { 
        if(_currentElem.style[arguments[0]] !== ''){ 
         return _currentElem.style[arguments[0]]; 
        } else { 
         return window.getComputedStyle(_currentElem, null)[arguments[0]]; 
        } 
       } 
      } 
     } 

     // change the color of the text 
     function color(color){ 
      _currentElem.style.color = color; 
      return this; 
     } 

     // log the current element 
     function test(){ 
      console.log('currentElem id: ' + _currentElem.id); 
      return this; 
     } 

     // return the public methods 
     return { 
      css: css, 
      current: test, 
      color: color 
     } 
    }; 
    // set the get method to the global object 
    window.get = get; 

})(); 

для доступа к методам из приведенного выше кода вы бы использовать что-то вроде

get('elemId').css(('prop': 'value'}).current().css('prop'); 

спасибо за любые ответы.

Приветствия,

Эндрю

ответ

1

Ну, в первую очередь вы должны прочитать этот вопрос: Learning garbage collection theory

Тогда вы должны знать, что каждый Java-среда реализовать свой очень специфический GC, так что абсолютно нет правила, когда и как объекты собираются мусором. Как только они не будут указаны, вы должны считать их утерянными навсегда и доверять (я знаю, что много спросить), что GC освободит память в «лучшее время» после того, как объект будет разыменован.

Чтобы узнать больше о конкретных материалах о каждом GC, вам необходимо прочитать ресурсы, касающиеся каждого из них, к счастью для вас, теперь есть только 3 основных двигателя! Вот ресурсы, чтобы помочь вам получить еще по теме GC в JS:

Я довольно уверен, что я не исчерпывают все эти ссылки, но я предполагаю, что это хорошая отправная точка для вас, чтобы узнать больше обо всех особенности ГХ трех двигателей JS!

+0

спасибо за все ссылки @zmo Я прочитаю их. Я предполагаю, что я пытаюсь попросить в более простых выражениях, является то, что это хороший способ выполнять самые основные часто повторяющиеся функции. Я все еще участвую, поэтому я всегда получаю HTMLElements, меняя узлы, меняя текст, запросы ajax, добавляя события и изменяя стили. Я думаю, что я мог бы легко абстрагировать это в мини-библиотеке, но не уверен, что это шаблон, за которым я должен следовать. – synthet1c

 Смежные вопросы

  • Нет связанных вопросов^_^