• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Employee.prototype = new Person()와Bridge.prototype = Person.prototype차이

20.09.25 00:50 작성 조회수 110

0

Employee.prototype = new Person()와

Bridge.prototype = Person.prototype

차이를 잘 모륵겠습니다 TT

제가 이해한거는 맨위에 new Person()을 하면 인스턴스를 Employee.prototype 에 넣어서 Person클래스의 메소드를 상속받아서 getName(),getAge()를 쓸수있는거는 알겠는데

Bridge.prototype = Person.prototype 하면은 어떻게 되는건지 ... 그리고 Employee.prototype = new Person() 하면 프로토타입에 name , age 이름없음 나이없음 뜨는게 생성자를 통해 생성된 인스턴스여서 name ,age프로퍼티가 존재하는건가요?  쓰면서 생각났는데 그러면 그와 반대로 Person.prototype를 Bridge.prototype넣으면 인스턴스가 아니라 prototype이니까 프로퍼티가 없는건가요?

답변 3

·

답변을 작성해보세요.

0

MIKE.aeon님의 프로필

MIKE.aeon

2020.10.07

1번 답변으로 아래 링크가 더 이해하기 쉬웠습니다 ^^

https://www.inflearn.com/questions/13000

0

휴가를 다녀오느라 답변이 늦었습니다.

1.

마지막에 추론하신바와 같이 Employee.prototype = new Person()에 의하면 Employee의 prototype은 Person의 prototype을 상속받긴 하지만 그와 동시에 Person의 인스턴스가 되므로 name, age 프로퍼티가 존재하게 됩니다.

반면 Bridge.prototype = Person.prototype 에 의하면, 비어있는 Bridge 함수에 prototype이 Person의 prototype을 참조하게 됩니다. 그 상태에서 new Bridge()로 인스턴스를 생성하면, 해당 인스턴스는 Bridge함수가 비어있으므로 name, age 프로퍼티가 생기지 않은 채로 Bridge의 prototype, 즉 Person의 prototype을 상속받게 됩니다.

아래 링크도 참고하시면 좋을 것 같네요.
https://www.inflearn.com/questions/46469

2.

비슷한 질문이 있어 링크로 답변을 대체합니다.
https://www.inflearn.com/questions/61956

0

이순곤님의 프로필

이순곤

질문자

2020.09.25

죄송한데 질문 하나 더 드리면 

function Employee(name, age, position){

this.superClass(name,age);

this.position = position || '직책모름';

}

여기서 함수를 생성자로 쓰면 this가 인스턴스 Employee를 가르키고 prototype chaining을통해 superClass가 parent즉 person을 가르키는건 알겠는데 그러면 this.Person('고무',30); 이 어떻게되서 Employee의 프로퍼티가 되는건가요?