instanceof는 과거 java에서 다형성에서 객체의 관계를 구분할 때 사용 했는데


JS역시 같은 방식으로 사용한다.


그리고 new를 통해서 객체를 생성했을 때와 { }괄호를 사용 했을 때는 차이가 있는데


new를 사용하면 클래스를 지역변수로 생성하고


{ }괄호를 사용하면 window에 전역변수로 생성된다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	.area{
		height: 100px;
		background: lightgray;
		border: 1px solid black;
	}
</style>
</head>
<body>
	<h1>객체 관련 키워드</h1>
	<h3>instanceof 키워드</h3>
	<p>해당 객체가 어떠한 생성자 함수를 통해 생성되었는지 확인할 때 쓴다.</p>
	<button onclick="test1();">실행 확인</button>
	<div id="area1" class="area"></div>
	
	<script type="text/javascript">
		function Dog(name) {
			this.name = name;
		}
		function test1() {
			var myDog = new Dog('까미');
			
			var yourDog = {name:'까미'};
			
			var area1 = document.getElementById("area1");
			
			area1.innerHTML += "myDog instanceof Dog : " + (myDog instanceof Dog) + "<br>";
			area1.innerHTML += "yourDog instanceof Dog : " + (yourDog instanceof Dog) + "<br>";
		}
	</script>
	
	<hr>
	
	<h3>new 키워드</h3>
	
	<button onclick="test2();">new 확인하기</button>
	<div id="area2" class="area"></div>
	<script type="text/javascript">
		function Duck(firstName, lastName) {
			this.firstName = firstName;
			this.lastName = lastName;
		}
		function test2() {
			var duck1 = new Duck("Mc", "Donald");
			console.log(duck1);
			
			var area2 = document.getElementById("area2");
			
			area2.innerHTML += "첫 번째 오리의 full Name은 " + duck1.firstName + duck1.lastName + "입니다. 꽥꽥! <br>";
			
			var duck2 = Duck("Donald", "Dorump");
			
			
			
			//area2.innerHTML += "두 번째 오리의 full Name은 " + duck2.firstName + duck2.lastName + "입니다. 꽥꽥! <br>"; 
		
			console.log(duck2);
			
			area2.innerHTML += "두 번째 오리의 full Name은 " + window.firstName + this.lastName + "입니다. 꽥꽥! <br>"; 
			
			// 두번째 오리의 주석처리된 출력문을 왜 못찾냐 하면
			// new를 붙여 생성하지 않고 생성자를 통해 생성하면 전역변수로 생성된다.
			// new로 호출하면 Duck의 this는 클래스 내부를 의미하고
			// 호출하지 않으면 window를 가리키는 this가 된다.
		}
	</script>
</body>
</html>


+ Recent posts