Software Engineering
Class 키워드를 대체하는 여러가지 방법들 In Javascript
JO_turn
2020. 10. 31. 13:41
i1. Functional
let Car = function(){
let someInstance = {};
//함수 실행 시 결과가 담길 객체 선언
someInstance.position = 0;
//인스턴스의 속성값posigion을 초기값 0으로 설정
someInstance.move = function(){
this.position++
}
//position이 1씩 증가하는 메소드 구현
return someInstance;
}
let car1 = Car();
car.move() //position : 1
//생성된 객체 선언 및 사용
let Car = function(position){
let someInstance = {};
someInstance.position = position;
someInstance.move = function(){
this.position++
}
return someInstance;
}
//Car 함수 전달인자의 position을 넣고, 초기값을 0 대신
//position으로 하면 초기위치를 지정할 수 있다.
let car2 = Car(5)
car2 // position : 2
2. Functional Shared
let extend = function(to, from) {
for(var key in from) {
to[key] = from[key];
}
};
//외부에 someInstance와 someMethods를 합치는 함수 생성
let someMethods = {};
someMethods.move = function(){
this.position ++;
}
//외부에 메소드 생성
let Car = function(position) {
let someInstance = {
position : position
};
extend(someInstance, someMethods);
return someInstance;
}
let car1 = Car(5);
let car2 = Car(10);
//사용해보기
***Functional방식과는 다르게 외부에 메소드와 함수를 선언해 놓았기 때문에, 실행 시 메모리효율이 더 좋아진다.
3. Prototypal
let someMethods = {};
someMethods.move = function(){
this.position ++;
}
//메소드 선언
let Car = function(position) {
let someInstance = Object.create(someMethods);
someInstance.poisition = position
return someInstance;
}
//Functional Shared방식과 비슷하나,
//Object.create()키워드를 사용한다.
let car1 = Car(5);
let car2 = Car(10);
//사용해보기
//Object.create()는 특정 객체를 프로토타입으로 하는 객체를 생성해주는 함수이다.
//someInstance는 someMethods의 prototype를 가져온다.
4. Pseudoclassical
let Car = function(position){
this.position = position;
};
Car.prototype.move = fubction(){
this.position++;
}
//메소드를 프로토 타입으로 생성
let car1 = new Car(5);
let car2 = new Car(10);
//'new' 키워드를 이용하여 사용한다.
//class키워드를 사용할 수 없을 때, 가장 많이 사용하는 방법이다.