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키워드를 사용할 수 없을 때, 가장 많이 사용하는 방법이다.