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; } }
상속은
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]; } }
메소드의 반환값으로
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 |