-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
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이니까 프로퍼티가 없는건가요?
답변을 작성해보세요.
0
0
정재남
지식공유자2020.09.29
휴가를 다녀오느라 답변이 늦었습니다.
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의 프로퍼티가 되는건가요?
답변 3