При использовании шаблона 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');
спасибо за любые ответы.
Приветствия,
Эндрю
спасибо за все ссылки @zmo Я прочитаю их. Я предполагаю, что я пытаюсь попросить в более простых выражениях, является то, что это хороший способ выполнять самые основные часто повторяющиеся функции. Я все еще участвую, поэтому я всегда получаю HTMLElements, меняя узлы, меняя текст, запросы ajax, добавляя события и изменяя стили. Я думаю, что я мог бы легко абстрагировать это в мини-библиотеке, но не уверен, что это шаблон, за которым я должен следовать. – synthet1c