본문 바로가기

TIL ( CODESTATES)

Kahoot Review - Inheritance pattern

다음 코드의 결과는?

 

human에는 정의된 hello 메소드가 없으니까 그 부모인 Person을 탐색해본다.

Person에도 정의된 hello메소드는 없으므로 답은 undefined가 된다. (잘못 생각한 부분)

 

-> Student.prototype = Person.prototype 이라고 명시한 부분 때문에 

Person.prototype.hello()를 입력하면 'hello, world' 가 콘솔에 나오게 된다.

그 때문에 Person의 인스턴스인 human에서도 hello 메서드가 출력된다.

 

답 : 'hello, world'

 


다음 코드의 결과는?

 

Student.prototype에 위 문제에서처럼 person.prototype을 바로 할당하지 않고 Object.create(Person.prototype) 라고 명시해 주었다.

이 때문에 Student.prototypedms Person.prototype을 기본으로 해서(즉, 복사해서) 새로운 객체를 만든다.

즉, human의 부모인 Person prototype 객체에는 정의된 메서드가 없다.

따라서 정답은 undefined 가 된다! (는 잘못 생각한 것!)

 

human.hello() 로 메서드를 호출하는데 function으로 정의된 메서드가 없기 때문에 undefined 가 아니라 TypeError 가 발생한다.

 

답 : TypeError

 


다음 코드의 결과는?

 

kali.prototype.constructor가 따로 명시되어 있지 않다.

kali의 부모인 Students는 Person의 prototype을 기본으로 가지기 때문에 kali.prototype.constructor는 Person이 될 것 이다.

 

 

답 : Person

 

 


다음 코드의 결과는?

c는 C의 instance이고 C는 sayHi 매서드를 가지고 있지 않으므로 다시 C의 부모를 탐색한다.

C는 B.prototype을 가지고, B는 A.prototype을 가진다.

먼저 B를 살펴보면 'hi'를 출력하는 SayHi 메서드를 가지고 있으므로 답은 'hi' 가 될 것 이다.

 

 

답 : 'hi'

 


c instanceOf B 의 결과는?  답 : True

b instanceOf C 의 결과는?  답 : False

c instanceOf A 의 결과는?  답 : True

 

위 코드에서 질문의 결과는(순서대로)?

human_2는 Person의 instance이고 name은 'kali'가 될 것이다.

human_3는 CoolStudent의 instance이고 age는 전달인자로 주어진 20이 될 것이다.

human_2의 hairColor는 human_2의 생성자인 Student에는 정의되어 있지 않은 속성이므로 undefined가 된다.

 

답: kali, 20, undefined

 

 

* 위 코드에서 call, apply 메서드를 사용할 때의 차이점 다시 한 번 보기

   Person.call(this.name);

   Student.apply(this, [name, age]);

 

* 정의되어 있지 않은 속성을 호출하려고 할 때는 undefined가 나오고,

   function으로 정의된 적이 없은 매서드를 호출하려고 할 때에는 TypeError가 나온다.

 

 


다음 코드의 결과는?

console.log에 찍어보기만 했으니까 결과값은 undefined가 될 것이다. (그런데 어쨋든 콘솔에 찍으니까 결과는 'hello world')

 

 

답 : 'hello, world'

 


다음 코드의 결과는?

new operator 때문에 일단 객체를 만들기 때문에 'hello, world'를 출력한 뒤 객체를 생성한다.

 

 

답: 'hello, world' 를 콘솔에 출력하고 객체{}를 반환한다.

 


다음 코드의 결과는?

 

human은 Person의 instance 인데 human.name을 'kim'으로 재정의했으니까 human.name은 'kim'이 된다.

human의 생성자객체 Person 안에 getName()메서드가 정의되어 있는데 이 메서는 그 scope 내에 있는 name을 가져오니까 'park'이 된다.

 

답 : kim, park