Back Ground

NodeJS - 상속 [ES5] 본문

Javascript/Node.js

NodeJS - 상속 [ES5]

Back 2018. 9. 13. 20:39

Node.js 상속 방법


require를 통해 util을 불러온다.

util의 inherits 를 이용하여 상속을 할수 있다


방식은


.inherits(상속시킬 대상 ,상속할 것); 을 넣었을때

상속이된다 .


test로 

console.log(Calc);를 했을때

super [ function : ]안에 상속을 받는다는것을 알수있다


이때 주의해야 할 점은 

상속받은 대상 객체가 상속을 받았다고 해서 상속된 것이 아니라

객체 생성을 해야 상속이 된다.


예제1)

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
var util = require('util');
var EventEmitter = require('events').EventEmitter;
 
var Calc = function(){
    var self = this;
 
    //함수의 제 정의 [super EventEmitter]
    this.on('stop',function(){
        console.log('Calc에 stop event 호출');
    });
};
 
// .inherits 상속
util.inherits(Calc,EventEmitter);
 
Calc.prototype.add = function(a,b){
    console.log("add 실행");
    return a+b;
}
 
//객체생성을 해야 상속가능
var calc = new Calc();
calc.add(2,3);
calc.emit('stop');
 
console.log(Calc);
 
//module.exports = Calc;
//module.exports.title = 'calculator';
 
cs


console.log(Cacl); 결과

 

{ [Function: Calc]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: false,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } }


※주의

이랬을 경우 console.log(Calc()); 이렇게 했을때 객체생성이 되어 있지 않기 때문에 에러가 발생한다.






예제 2)

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
var util = require('util');
var Person = function(){
    this.name = '장동건';
    this.age = 29;
}
 
Person.prototype = {
    play : function(){
       console.log('사람이 놀아요');  
    },
    work:function(){
       console.log("사람이 일해요");
    },
    todo:function(){
        this.play();
        this.work();
    }
}
 
var Student = function(){
    
};
Student.prototype = {
    play : function(){
       console.log('학생이 놀아요');  
    },
}
    
 
//상속 inherits
util.inherits(Student,Person);
 
var pp = new Person();
var st = new Student();
pp.play();
console.log('----------------------');
pp.todo();
console.log(pp.name);
 
st.play();
console.log('----------------------');
st.todo();
console.log(st.name);
cs


[결과]

사람이 놀아요
사람이 일해요
장동건
학생이 놀아요
----------------------
학생이 놀아요
사람이 일해요 
undefined


이랬을 경우 st.name 는 'undefined'가 나오게 되는데

그건 Person의 tihs로 지정했기에 주소값을 갖고 있지 않기 때문이다.


재정의 ( 오버라이딩 ) 

Student.prototype = {
    play : function(){
       console.log('학생이 놀아요');  
    },
}

이 부분에서 상속받았던 play가 Student에서 지정한 play가 재정의해서

나오게 된다. 

이런식으로 최적화 (customizing)시킨다.



'Javascript > Node.js' 카테고리의 다른 글

NodeJS - 파일을 직접 열고 닫으면서 읽거나 쓰기 [ES5]  (0) 2018.09.14
NodeJS - 파일 읽고 쓰기 [ES5]  (0) 2018.09.14
NodeJS - process [ES5]  (0) 2018.09.11
NodeJS - [노드에 대해]  (0) 2018.09.05
NodeJS - [서버]  (0) 2018.09.05
Comments