JavaScript 객체 지향 프로그래밍

객체 간의 상속

수업소개

JavaScript는 객체(인스턴스)와 객체 간의 상속 관계를 자유롭게 설정할 수 있습니다. 이 수업에서는 클래스가 아닌 객체를 통해서 상속하는 방법을 알아봅니다. 

 

 

 

강의1

자바스크립트의 상속이 클래스 기반 언어와 어떻게 다른지 소개해드립니다. 

 

 

 

강의2

__proto__를 이용해서 상속을 구현하는 방법을 소개합니다. 

 

 

 

코드

prototype-inheritance.js (변경사항

var superObj = {superVal:'super'}
var subObj = {subVal:'sub'}
subObj.__proto__ = superObj;
console.log('subObj.subVal =>', subObj.subVal);
console.log('subObj.superVal =>', subObj.superVal);
subObj.superVal = 'sub';
console.log('superObj.superVal =>', superObj.superVal);

 

 

 

강의3

Object.create를 이용해서 __proto__를 대체하는 방법을 소개합니다. 

 

 

 

코드

prototype-inheritance.js (변경사항)

var superObj = {superVal:'super'}
// var subObj = {subVal:'sub'}
// subObj.__proto__ = superObj;
var subObj = Object.create(superObj);
subObj.subVal = 'sub';
debugger;
console.log('subObj.subVal =>', subObj.subVal);
console.log('subObj.superVal =>', subObj.superVal);
subObj.superVal = 'sub';
console.log('superObj.superVal =>', superObj.superVal);

 

 

 

강의4

기존의 예제를 상속으로 구현하는 방법을 소개합니다. 

 

 

 

 

코드

prototype-inheritance.js (변경사항)

 

var superObj = {superVal:'super'}
// var subObj = {subVal:'sub'}
// subObj.__proto__ = superObj;
var subObj = Object.create(superObj);
subObj.subVal = 'sub';
debugger;
console.log('subObj.subVal =>', subObj.subVal);
console.log('subObj.superVal =>', subObj.superVal);
subObj.superVal = 'sub';
console.log('superObj.superVal =>', superObj.superVal);

var kim = {
    name:'kim',
    first:10, second:20,
    sum:function(){return this.first+this.second}
}

// var lee = {
//     name:'lee',
//     first:10, second:10, 
//     avg:function(){
//         return (this.first+this.second)/2;
//     }
// }
// lee.__proto__ = kim;

var lee = Object.create(kim);
lee.name = 'lee';
lee.first = 10;
lee.second = 10;
lee.avg = function(){
    return (this.first+this.second)/2;
}
console.log('lee.sum() : ', lee.sum());
console.log('lee.avg() : ', lee.avg());

 

댓글

댓글 본문
  1. 파시
    230619
  2. 개발맨
    완료, 감사합니다. 이제 리액트 강의로 넘어가겠습니다.
  3. mini
    20211205 감사합니다~!
  4. labis98
    20210904 좋은 강의 감사합니다.
  5. 금도끼은도끼
    좀 헷갈리신듯 말이안되는코드네요..

    그냥 한줄만 바꾸시면되겠네요..
    lee.sum1 =function() { teturn lee.sum() + this.third ; }
    대화보기
    • 김명성
      Object.create()로 해당 객체를 상속한다 했을때 새로운 함수를 정의하는데에는 lee.avg처럼 문제가 없어 보이는데요.
      만약 세개의 인자를 받는 sum()을 재정의 하고 싶을 때는 어떻게 해야 할까요? lee.third = 10;을 지정하고 lee.sum = function() { return lee.sum() + this.third; } 가 동작하지 않네요...
    • Giri
      감사합니다.
    • 어쩌다보이
      Object.create() 는 ()속 상위객체의 메소드를 상속한다.. 맞나요?
    • hyuna lee
      Object.create() 좋네요.
      일요일에도 듣고 가요~