ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

JavaScriptにJavaでいうところのオーバーロードはない?

引数は省略可能なので、仮引数の数による関数の区別はない。
つまり、Javaでいうところのメソッドのシグネチャは、純粋に関数名によるらしい。

<script type = "text/javascript">
function abc(a, b)
{
	alert("abc1");
}

function abc(a, b, c)
{
	alert("abc2");
}

abc(1, 2);
</script>

だと、"abc2"が表示されて、

<script type = "text/javascript">
function abc(a, b, c)
{
	alert("abc2");
}

function abc(a, b)
{
	alert("abc1");
}

abc(1, 2);
</script>

だと、"abc1"が表示される。
つまり、後から定義された関数の勝ちってことかな。


一つの関数を引数の数によって挙動を分けたい場合は、
arguments.length
を使うのがJavaScript流らしい。
(参考)JavaScriptの使える小技です。: Javascriptでオーバーロードを実現する