重載是面向對象中常用的功能。雖然JS不直接支援函數重載,但是可以通過很多方式來實作函數重載。JS的每個函數都帶有一個僅在這個函數範圍内作用的變量稱為參數argument,它是一個包含所有傳給函數的參數的維數組,它并非真正意義上的數組,它不能被修改,但可以通路其中的元素及屬性。
通過下面這個例子來直覺的了解一下:
<script type="text/javascript" language="javascript">
//發送一條消息的函數
function sendMessage(msg, obj) {
//如果傳入參數是兩個,使用obj發送消息
if (arguments.length == 2)
obj.handleMsg(msg);
//如果沒有傳入參數,顯示錯誤消息
else if (arguments.length == 0)
alert("An error occured!");
//如果傳入參數是msg,顯示消息
else if (typeof (msg) == "string")
alert(msg);
//如果傳入參數是obj,使用obj發送消息
else if(typeof(msg) == "object")
msg.handleMsg();
}
sendMessage("Hello, World!");
sendMessage();
sendMessage("How are you?", {
handleMsg: function (msg) {
alert("This is a custom message: " + msg);
}
});
sendMessage({
handleMsg: function () {
alert("This is a custom message");
}
});
</script>