튜토리얼을 통해서 NodeJS를 공부하고 있는데 만들어진 코드를 그대로 사용했으나 실행할때 에러가 발생했다. 오류의 내용을 다음과 같았다.

ReferenceError: Must call super constructor in derived class before accessing ‘this’ or returning from derived constructor

코드를 살펴볼 때는 전혀 오류가 발생할 부분이 없었는데 위와같은 오류가 발생하니 뭔가 싶었다. 문제는 예제에서 만들어진 최상위 클래스가 생성자도 없고 별 내용이 없어서 문제가 없어 보였을 뿐 문제가 있었다.

위 오류는 this를 호출하기 전에는 반드시 슈퍼 클래스의 생성자를 호출해야 된다는 에러다. 클래스에 생성자가 없어도 기본 생성자는 알아서 생성되니 어떤 경우건 super()을 호출해야 this를 쓸 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Figure {
	getSize() {
		return 0;
	}
}

class Oval extends Figure {
	constructor(radius1, radius2) {
		// super();
		this.radius1 = radius1;
		this.radius2 = radius2;
	}

	getSize() {
		return this.radius1 * this.radius2 * Math.PI;
	}
}

class Circle extends Oval {
	constructor(radius) {
		super(radius, radius);
	}
}

class Rect extends Figure {
	constructor(width1, width2, height) {
		// super();
		this.width1 = width1;
		this.width2 = width2;
		this.height = height;
	}

	getSize() {
		return ((this.width1 + this.width2) / 2) * this.height;
	}
}

class Rectangle extends Rect {
	constructor(width, height) {
		super(width, width, height);
	}
}

class Square extends Rect {
	constructor(width) {
		super(width, width, width);
	}
}

var mSquare = new Square(5);
console.log(mSquare.getSize());
WRITTEN BY

배진오

하고싶은 건 다 하면서 사는게 목표
im@baejino.com

comments powered by Disqus