<script type="text/javascript">
$(document).ready(function()
{
$('#root').magic("init",'AAA','BBB', 'CCC');
});
</script>
/*-------------- .js * /
(function($)
{
var myMagic =
{
init : function(params, params2, params3)
{
console.log('this is init = ', params, params2, params3)
},
addController : function(params)
{
},
addPager : function(params)
{
}
};
jQuery.fn.magic = function(magicName)
{
console.log(Array.prototype.slice.call(arguments, 1))
/*
실제로 얘는 ['AAA', 'BBB', 'CCC'] 배열을 토해낸다
Array.prototype.slice.call(arguments, 0)) 0 은 arguments 첫 요소 " 함수 " 이름이 온다.
*/
if(myMagic[magicName])
{
myMagic[magicName].apply(this, Array.prototype.slice.call(arguments, 1));
/*
원래 대로라면 myMagic[magicName].apply(this, Array.prototype.slice.call(arguments, 1, 2)); 2는 인덱스 (0~...) 뒤에 마지막 인덱스를 주지 않는 이유는 매개변수를 몇개든 임의로 줄수 있게 하기 위해서다.
그래야 함수 선언 할때 매개변수숫자만 추가해주면 참조 할수 잇게 된다
init : function ( params, params2, params3) 이런식으로 말이다
*/
}
}
})(jQuery);
myMagic[magicName] 요런 형식은 그냥 Object["속성이름"] 으로 참조되는 것과 같다.
플러그인에서 다른 기능을 하는 함수들을 하나의 Object 에 선언해놓고 함수 이름으로 참조하는 법이다.
call 과 apply 에 관련된 내용은
얘를 참조
'코드 > JS' 카테고리의 다른 글
jquery ready (0) | 2013.10.23 |
---|---|
ie6에서 png 이미지 디스플레이 (0) | 2013.10.10 |
(function($){...})(jQuery) (0) | 2013.07.12 |
jQuery.extend (0) | 2013.06.27 |
자바스크립트로 stylesheet 파일 로드하기 (0) | 2013.01.15 |