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, 노드 변경, 텍스트 변경, 아약스 요청, 이벤트 추가 및 스타일 변경을 항상 배우기 위해 계속 배우고 있습니다. 나는 이것을 아주 쉽게 미니 라이브러리로 추상화 할 수 있다고 생각하지만 이것이 내가 따라야하는 패턴인지는 확실하지 않다. – synthet1c