본문 바로가기

개발/Javascript

Classes & Constructors

Classes & Constructors

  • 항상 class를 사용하십시오. prototype 을 직접 조작하지마시오

  • prototype 을 직접 조작하는것을 피하고 항상 class 를 이용해 주십시오.

    Why? class syntax is more concise and easier to reason about.

    왜? class 구문은 간결하고 의미를 알기 쉽기 때문입니다.

    // bad
    function Queue(contents = []) {
      this._queue = [...contents];
    }
    Queue.prototype.pop = function() {
      const value = this._queue[0];
      this._queue.splice(0, 1);
      return value;
    }
    
    // good
    class Queue {
      constructor(contents = []) {
        this._queue = [...contents];
      }
      pop() {
        const value = this._queue[0];
        this._queue.splice(0, 1);
        return value;
      }
    }
  •  Use extends for inheritance.

  • 상속은 extends 를 이용해 주십시오.

    Why? It is a built-in way to inherit prototype functionality without breaking instanceof.

    왜? instanceof 를 파괴하지 않고 프로토타입 상속을 하기 위해 빌트인 된 방법이기 때문입니다.

    // bad
    const inherits = require('inherits');
    function PeekableQueue(contents) {
      Queue.apply(this, contents);
    }
    inherits(PeekableQueue, Queue);
    PeekableQueue.prototype.peek = function() {
      return this._queue[0];
    }
    
    // good
    class PeekableQueue extends Queue {
      peek() {
        return this._queue[0];
      }
    }
  •  Methods can return this to help with method chaining.

  • 메소드의 반환값으로 this 를 반환하는 것으로 메소드채이닝을 할 수 있습니다.

    // bad
    Jedi.prototype.jump = function() {
      this.jumping = true;
      return true;
    };
    
    Jedi.prototype.setHeight = function(height) {
      this.height = height;
    };
    
    const luke = new Jedi();
    luke.jump(); // => true
    luke.setHeight(20); // => undefined
    
    // good
    class Jedi {
      jump() {
        this.jumping = true;
        return this;
      }
    
      setHeight(height) {
        this.height = height;
        return this;
      }
    }
    
    const luke = new Jedi();
    
    luke.jump()
      .setHeight(20);
  • It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.

  •  toString()을 작성하는것을 허용하지만 올바르게 동작하는지와 side effect 가 없는지만 확인해 주십시오.

    class Jedi {
      constructor(options = {}) {
        this.name = options.name || 'no name';
      }
    
      getName() {
        return this.name;
      }
    
      toString() {
        return `Jedi - ${this.getName()}`;
      }
    }


'개발 > Javascript' 카테고리의 다른 글

이터레이터와 제너레이터(Iterators and Generators)  (0) 2018.03.11
모듈(Modules)  (0) 2018.03.11
함수(Functions)  (0) 2018.03.11
문자열(Strings)  (0) 2018.03.11
구조화대입(Destructuring)  (0) 2018.03.11