전화를 걸 때 약간의 도우미를 표시하는 플러그인을 작성하고 있습니다. 이 같은
$(el).santasLittleHelper([options])
이 플러그인은 다음 바로 JQuery와 UI 같은 일부 "이벤트"가 있고 그들은 트리거해야합니다 : 다음과 같이 시작해야하는데
$(el).santasLittleHelper('evetnName', [options])
내가 작업 프로토 타입을 가지고 있지만 내 구조에 대한 미래의 문제에 대해 몇 가지 우려가 있습니다. 메모리를 가득 채우거나 변수 및 기능 범위에 대한 다른 문제가 있으면 계속해서 작업합니다. 다음은 개요입니다.
(function($) {
$.fn.santasLittleHelper = function(p1, p2) {
return this.each(function() {
var o = {
showSpeed: 50,
hideSpeed: 50,
duration: 5000,
delay: 0
}
var el = $(this);
function init() {
console.log('init 1');
}
var events = {
show: function(opt) {},
hide: function(opt) {},
pulse: function(opt) {}
}
if(p1 == undefined) {//This is obviously the init call
init();
}
if(typeof(p1) == 'object') {
//Correctly added parameters would then mean that p1 is options
//and is the only parameter added so we store the options and init
$.extend(o, p1);
init();
}
if(typeof(p1) == 'string') {
//This is a call to an "event".
//call the "event" function and supply possible options as arg
events[p1](p2);
}
});
}
})(jQuery);
옵션은 각 이벤트 호출마다 제공 될 수 있지만이 경우 해당 이벤트 기능 범위에서만 사용할 수 있어야합니다. 이것은 헬퍼가 init 호출에서 옵션을 제공함으로써 내가 만든 정신 상자에서 무엇인가를하기를 원하기 때문입니다.
코드 시작 부분에 선언 된 변수 때문에 $ (el) .santasLittleHelper ('event')를 호출 할 때마다이 접근 방식이 약간 메모리를 채 웁니까?
깨끗하고 이해할 만해 보이지만 개선 할 수 있다고 생각하십니까?
'var init = function init() {...}'과 같은 코드에주의하십시오. 이상한 브라우저 버그로 인해'function init() {...} '을 사용하는 것이 더 안전합니다. (어쨌든 거의 똑같습니다.) – Pointy
참. 나는 그 지위를 편집했다. 이 함수는 내가 맞다면 여전히 플러그인 범위에있다? – Anders
예,'var'을 사용하여 선언 한 것과 거의 동일한 효과가 있습니다. 사실 나는 그것이 문제를 일으킨다면 아마도 다른 것이 잘못되었다는 것을 의미한다고 말할 수 있습니다 :-) 당신의 경우에 그것은 나에게 잘 들립니다. – Pointy