2009年11月12日星期四

Javascript - Passing arguments as Function

在Javascript中,Call Function絕對不會陌生,但如果有若干數量的Function因應不同的情況才Call怎麼辦呢?
當然有很多可能性,其中最常見的亦是傳統做法不外乎
if..(condition)..then...
function1();
function2();
function3();
...
而我的做法就是自行寫一個Helper,用Array以arguments型式去呼叫Function。
function SayGoodBye()
{
   $('#hello').html('GoodBye');
}

function SeeYou()
{
   $('#hello').html($('#hello').html() + ',' + 'See you next time!');
}

function caller(aryfunc)
{
   $.each(aryfunc,function(i,n) //用jQuery的each
     {  Function.call(n());  }
   );
}

$(document).ready(function() { 
  //if..(condition)..then...
  var myFunc = new Array(SayGoodBye,SeeYou); //and more...
  caller(myFunc); //Print out : GoodBye,See you next time!
}); 
<div id="hello"></div>

這就可以把 condition 移至外部,用Helper去呼叫Function更加靈活。而且Array中的項目,Function的arguments不只是資料型態(String,Int...),更可以是function()吧。

3 則留言:

  1. 在 $.each 裏的 this 已是 array element,所以直接 this() 就可以了,不用 Function.call. 見 http://jsbin.com/otubi/edit

    將 function pass 來 pass 去是 javascript 的強大之處,jQuery 當用的語法如 $("#abc").click(function(){ ... }) 其實就是將一個 anonymous function pass 進 click function 裏去

    回覆刪除
  2. 請問版主,若是使用 javascript 又該如何實現多載

    回覆刪除
  3. 原生的Javascript是沒有overload(多載)的.
    網上你會找到很多例子說可以做到,但如果你細心睇睇,很明顯與C#,Java的overload是不同.
    如果真的需要的話,可以這樣自行建構.
    [js]
    <script language="JavaScript">
    function Test1(param)
    {
    alert(param);
    }

    function Test2(param1,param2)
    {
    alert(param1 + param2);
    }

    function TestOverload(param1,param2)
    {
    if(param2==null)
    Test1(param1);
    else
    Test2(param1,param2);
    }

    TestOverload(1);
    TestOverload(1,2);
    </script>
    [/js]

    回覆刪除