[Javascript]オーバーロードとオーバーロード


1.Overriding:実施部門の多様性


:JavaScriptは、元の定義された識別子(alertなど)を上書きすることもできます.何でもデータ型を変更できるので、typeofを印刷しなければなりません!
<テスト例>
//사용된 변수는 window에 등록되고, 값은 가변적으로 사용이 가능하다. 
	var hello = 1234;
	hello = "안녕하세요";
	
	console.log(typeof hello);
	hello= 1234;
	console.log(typeof hello);
	hello= 1234;
	console.log(typeof hello);
	hello = new Date(); //생성자 처럼 사용
	console.log(typeof hello);
	hello = Date(); //메소드처럼 사용하면 결과(return type)을 전달해준다.
	console.log(typeof hello);
	
	hello = {name:"채수빈", age:10}; //클래스가 없기 때문에 name, age의 멤버 데이터로 객체를 정의 
	console.log(typeof hello);
	
	hello = function(){
		console.log("hello를 값을 지정하는 식별자에서 동작을 정의하는 식별자로 변경");
		//return 필수가 아님 
	}
	console.log(typeof hello);
	
	//식별자도 type을 변경할 수 있으니 확인하면서 코딩해야한다.!!
	alert = function(){ //원래 정의 되어있던 식별자(예: alert)도 overriding할 수 있음
		console.log("구현부 바꾸는거 - overriding");		
	}
	window.alert("message");
<テスト結果>

**注意!
:識別子はtypeを変更することもできますが、確認しながら符号化する必要があります.

2.過負荷-入力パラメータの多様性


:JavaScriptでは、パラメータ宣言に関係なく入力値を入力できます.
<テスト例>
	function user(){
		console.log("user()");
	}
	
	//overloading - 매개인자 선언과 상관없이 입력값을 넣을 수 있다.
	myUser = function(name, age){
		console.log("myUser()",arguments.length); //자바스크립트의 배열은 가변적으로 사용이 가능하다.(java와 큰 차이점)
		console.log(name,age);
		for (var t in arguments){
			console.log(arguments[t],t, typeof arguments[t]); //t는 인덱스 값(키 값)
		}
	}
	
	user();
	myUser();
	myUser("홍길동",10);
	myUser(10,20,30,40);
	
<テスト結果>