Object.setPrototype(ray, IdolModel.prototype); 호출 후, ray.dance()가 실행되는 이유를 모르겠어요
494
작성한 질문수 4
섹션3 prototype 강의에서 Object.setPrototype(ray, IdolModel.prototype);을 실행한 후에도 ray.dance()가 실행됩니다.
instanceof를 사용해서 확인한 결과, false가 출력되므로 ray.dance()에서 에러가 발생해야 한다고 생각했는데 제가 잘 못 이해하고 있을까요?
Object.setPrototypeOf(ray, IdolModel.prototype);
console.log(ray.sayHello());
console.log(ray.dance()); //왜 실행되는지?
console.log("ray's type: ",ray instanceof FemaleIdolModel);
답변 2
0
안녕하세요!
실행 가능한 전체 예제 코드를 보여주시기 바랍니다!
댓글 달아주시면 다시 답변 드릴게요!
감사합니다!
0
전체 예제 코드는 아래와 같습니다
function IdolModel(name, year) {
this.name = name;
this.year = year;
}
IdolModel.prototype.sayHello = function() {
return `${this.name} 인사를 합니다.`;
}
function FemaleIdolModel(name, year) {
this.name = name;
this.year = year;
this.dance = function() {
return `${this.name}가 춤을 춥니다.`;
}
}
const gaEul = new IdolModel('가을', 2002);
const ray = new FemaleIdolModel('레이', 2004);
console.log(gaEul.__proto__);
console.log(gaEul.__proto__ === IdolModel.prototype);
console.log(Object.getPrototypeOf(gaEul) === IdolModel.prototype); //gaEul 인스턴스의 __proto__를 가져옴
console.log();
console.log(gaEul.sayHello());
console.log(ray.dance());
console.log(Object.getPrototypeOf(ray) === FemaleIdolModel.prototype);
// console.log(ray.sayHello()); // 해당 메소드가 클래스 안에 없어서 실행 불가
Object.setPrototypeOf(ray, IdolModel.prototype); //이미 생성된 객체에 __proto__를 수정함으로서 이전에 호출하지 못한 함수를 호출 할 수 있게 됨
console.log(ray.sayHello());
console.log(ray.dance()); //?
console.log("ray's type: ",ray instanceof FemaleIdolModel);
console.log(ray.constructor === FemaleIdolModel); //false
console.log(ray.constructor === IdolModel); //true
console.log(Object.getPrototypeOf(ray) === FemaleIdolModel.prototype); //false - 기존 연결이 끊김
console.log(Object.getPrototypeOf(ray) === IdolModel.prototype); //false - 기존 연결이 끊김
console.log(FemaleIdolModel.prototype === IdolModel.prototype); //false
FemaleIdolModel.prototype = IdolModel.prototype;
1
this.dance에 함수를 할당할경우 name과 year처럼 인스턴스에 직접 귀속됩니다. 아래 예제를 확인해보시면 조금 더 쉽게 확인 할 수 있습니다. toString()을 실행이 가능하지만 직접 들고있는 프로퍼티인지 확인하는 hasOwnProperty를 사용하면 dance의 경우 true가 나오지만 프로퍼티 체인을 통해 상속 받는중인 toString은 false가 나옵니다.

EXPLOPER에서 파일을 삭제하는 방법을 알려주세요 ㅜㅜ
0
100
2
&& ||가 너무 햇갈려요
0
97
2
js에선 string값이 아스키코드값으로 저장되지 않나요?
0
72
2
여러줄에 주석 쓰는 방법 질문
0
119
1
출력이안되요 ㅜㅜ
0
821
3
선생님, 감사해요
0
250
2
Factory Constructor를 언제 사용하나요?
0
231
2
n개의 await를 사용하면, 이들은 promise chaining 처럼 동작하나요?
0
168
1
안유진을 얼마만큼 좋아하시는 건가요?
7
470
2
단축 평가 (short circuit evaluation) 패턴 관련 질문있습니다.
0
217
1
클래스를 써야할때와 함수를 써야할때
0
314
2
혹시 공부한 내용을 개인 블로그(티스토리 등)에 요약해서 올려도 될까요 ?
0
335
1
Copy by Value에 대해 질문있습니다!
0
257
2
메모리 강의 중 메모리 활용 부분 질문드립니다.
0
274
1
Super Keyword 질문 있어요!
0
333
1
Static Keyword 질문 있어요!
0
272
1
선생님 저 멍청한거 맞죠?
0
745
2
sort 함수에 대해 궁금한 점이 있습니다.
0
435
1
대소관계 비교할 때 문자열과 비교할 경우
0
349
1
const 에서
0
408
1
함수 안 변수 키워드를 var를 사용하시는 이유가 궁금합니다.
0
552
1
Arrow 함수 질문있습니다.
2
363
1
scope에 대해 질문 있습니다.
0
320
1
Ts 가 목표인데 Prototype Chain 부분 정확하게 이해하고 넘어가야 할까요?
0
552
1





