개발자
아래 코드에서 `SubClass.prototype.constructor = SubClass;`는 왜 필요한건가요? SubClass 메서드를 생성할 때 함께 만들어지는 프로토타입 객체를 참조해야 해서 그렇다고는 하는데 왜 참조해야 하는지 모르겠어요. 자식객체만의 메서드도 있을 것 같긴 한데..ㅠ
1function SuperClass (name) {
2 this.name = name;
3}
4SuperClass.prototype.say = function () {
5 console.log(`I am ${this.name}`);
6}
7function SubClass (name) {
8 SuperClass.call(this, name);
9}
10SubClass.prototype = Object.create(SuperClass.prototype);
11SubClass.prototype.constructor = SubClass;
12SubClass.prototype.run = function () {
13 console.log(`${this.name} is running`);
14}
답변 1
'SubClass.prototype.constructor = SubClass;' 코드는 상속 관계에서 생성된 객체의 생성자를 올바르게 설정하기 위한 것입니다. 자바스크립트에서 객체의 'constructor' 속성은 해당 객체를 생성한 생성자 함수를 가리킵니다. 상속 관계에서 하위 클래스('SubClass')가 상위 클래스('SuperClass')를 상속받을 때, 하위 클래스의 'constructor' 속성은 상위 클래스의 생성자 함수('SuperClass')를 가리키게 됩니다. 이는 상속 관계가 정확하게 표현되지 않는 문제를 발생시킬 수 있습니다. 따라서 'SubClass.prototype.constructor = SubClass;' 코드는 'SubClass'의 프로토타입 객체의 'constructor' 속성을 'SubClass'로 설정하여, 하위 클래스의 생성자를 올바르게 지정하는 역할을 합니다. 이를 통해 상속 관계가 올바르게 표현되고, 객체의 생성자 정보를 유지할 수 있게 됩니다. 또한, 'SubClass.prototype.constructor = SubClass;' 코드는 'Object.create(SuperClass.prototype);'를 사용하여 'SuperClass'의 프로토타입을 상속받은 후에 필요합니다. 'Object.create()' 메서드로 생성된 객체는 'constructor' 속성이 상위 클래스의 생성자 함수를 가리키기 때문에, 'SubClass'로 수정해주어야 올바른 생성자 함수를 가리키게 됩니다. 이렇게 하위 클래스의 생성자를 올바르게 지정하면, 상속 관계가 명확하게 표현되고 객체의 생성자 정보가 올바르게 유지되어 코드의 가독성과 디버깅에 도움이 됩니다.
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!