Class
자바와 같은 객체 지향 언어처럼, class 키워드를 사용하여 부모-자식간의 상속을 만들어 줄 수 있다.
class 부모이름 { constructor() { } } 의 형식으로 사용하며, 오직 constructor() { 이곳에 작성한 내용들만 } 자식에게 상속된다. 자식은 new 키워드를 사용하여 부모를 호출해 상속받는다. 이 때 전달된 파라미터는 constructor(파라미터) 의 '파라미터'에서 전달받아 사용할 수 있다.
또한 자식의 프로토타입을 알아내기 위해 자식.__proto__ 와 같은 역할을 수행하는, Object.getPrototypeOf(자식) 을 사용할 수도 있다.
<script>
class mother {
constructor(파라미터) {
this.cat = "chali"
this.params = 파라미터
this.sayHi = function() {
console.log('hello')
}
}
protoFunction() {
console.log('오직 부모의 프로토타입일 뿐, 상속되지는 않습니다.')
}
}
let me = new mother('파라미터 전송')
console.log('me :',me)
console.log('me.__proto__ : ',me.__proto__, 'Object.getPrototypeOf(me):',Object.getPrototypeOf(me))
</script>
extends 를 통해 기존에 만든 class를, 다른 class에 상속해 줄 수 있다. class 자식 extends 부모 { constructor() {...} } 의 형태로 사용한다.
super은 'extends를 통해 물려받은 부모가 가지고 있는 constructor' 을 가리킨다.
<script>
class 조상님 {
constructor(성씨) {
this.성 = 성씨
this.고양이 = 'chali'
}
}
class 엄마 extends 조상님 {
constructor(성씨) {
// super() == 물려받는 class의 constructor 이라는 뜻
super(성씨)
this.성별 = '여자'
}
}
let 어머니 = new 엄마('김');
console.log(어머니)
</script>
또한 super에는 다른 용도가 있다. 만일 super가 부모를 물려받은 자식의 constructor 속에서 사용되었다면, 상속받은 부모 class의 constructor를 의미한다.
그러나 super이 자식 constructor의 바깥에서 사용되었을 때에는, 부모 class가 가진 prototype을 의미한다.
<script>
class 조상님 {
constructor(성씨) {
this.성 = 성씨
this.고양이 = 'chali'
}
함수() {
console.log('조상님의 프로토타입')
}
}
class 엄마 extends 조상님 {
constructor(성씨) {
// constructor 안에서 호출된 super은
// 물려받는 class의 constructor 이라는 뜻이다.
// 따라서 조상님의 constructor를 가리킨다.
super(성씨)
super.함수()
this.성별 = '여자'
}
함수() {
console.log('엄마가 가진 함수');
// 조상님이 가진 프로토타입의 함수()를 가리킨다.
// 즉, 조상님.prototype.함수() = super.함수()
super.함수()
}
}
let 어머니 = new 엄마('김');
console.log(어머니)
console.log(어머니.함수())
</script>
'JavaScript > JavaScript 기초' 카테고리의 다른 글
[Javascript ES6] 기초 문법 12. Destructuring (1) | 2022.12.20 |
---|---|
[Javascript ES6] 기초 문법 10. get, set (0) | 2022.12.20 |
[Javascript ES6] 기초 문법 9-1. <JS의 상속> - prototype 을 Object.create()로 만들기 (1) | 2022.12.20 |
[Javascript ES6] 기초 문법 <JS의 상속> 9. prototype (0) | 2022.12.20 |
[Javascript ES6] 기초 문법 8. constructor (0) | 2022.12.20 |
댓글