js - 메서드 정의

728x90

 이 글은 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/Method_definitions

 

메서드 정의

ECMAScript 2015 를 시작으로, 객체 초기자(initializer)에 메서드 정의를 위한 더 짧은 구문이 도입되었습니다. 이는 메서드 명에 할당된 함수를 위한 단축입니다.

developer.mozilla.org

위 글을 참고하였습니다.

 

ECMAScript 2015 를 시작으로, 객체 초기자(initializer)에 메서드 정의를 위한 더 짧은 구문이 도입되었다. 이는 메서드 명에 할당된 함수를 위한 단축이다.

구문

var obj = {
  property( parameters… ) {},
  *generator( parameters… ) {},
  
// 키(속성) 계산값과도 함께:
  [property]( parameters… ) {},
  *[generator]( parameters… ) {},
  
// ES5 getter/setter 구문과 비교해 보세요:
  get property() {},
  set property(value) {}
};

설명

단축 구문은 ECMAScript 5에 도입된 getter  setter 구문과 비슷합니다.
다음 코드가 주어지면:

var obj = {
  foo: function() {},
  bar: function() {}
};

이제 이를 아래로 줄일 수 있습니다.

var obj = {
  foo() {},
  bar() {}
};
더보기

주의 : 단축 구문은 익명(anonymous) 함수 (…foo: function() {}… 에서처럼) 대신 유명(named) 함수를 사용합니다. 유명 함수는 함수 본체에서 호출될 수 있습니다 (이는 참조할 식별자가 없기에 익명 함수에게는 불가능합니다). 자세한 사항은, function 참조.

 

       단축 생성기 메서드 

생성기 메서드는 단축 구문을 사용해서도 정의될 수 있습니다. 단축 구문 내 별표(*)는 생성기 속성명 앞에 와야 함을 주의하세요. 즉, * g(){}는 작동하지만 g *(){}는 아닙니다. 

// 유명 속성 사용 (ES2015 이전)
var obj2 = {
  g: function*() {
    var index = 0;
    while(true)
      yield index++;
  }
};

// 단축 구문을 쓰는 같은 객체
var obj2 = {
  * g() {
    var index = 0;
    while(true)
      yield index++;
  }
};

var it = obj2.g();
console.log(it.next().value); // 0
console.log(it.next().value); // 1

메서드 정의는 생성 불가능합니다

       메서드 정의는 생성 불가능합니다

var obj = {
  method() {},
};
new obj.method; // TypeError: obj.method는 생성자가 아닙니다

var obj = {
  * g() {}
};
new obj.g; // TypeError: obj.g는 생성자가 아닙니다 (ES2016에서 바뀜)

 

       간단한 테스트 사례

var obj = {
  a : "foo",
  b(){ return this.a; }
};
console.log(obj.b()); // "foo"

 

        속성 계산명

단축 구문은 속성 계산명(computed property name)도 지원한다.

var bar = {
  foo0 : function (){return 0;},
  foo1(){return 1;},
  ["foo" + 2](){return 2;},
};

console.log(bar.foo0()); // 0
console.log(bar.foo1()); // 1
console.log(bar.foo2()); // 2

 

자바 스크립트를 공부할 때, 가볍게 훑으면서 지나갔더니 이전방식의 메서드 정의도 생소하게 느껴졌다. Node.js 강의를 보면서 코드를 보다보니 이해가 안가는 부분이 있어 구글링을 하다가, 메서드 정의를 이렇게도 할 수 있구나 하는 것을 알게되었다. (역시 기초는 탄탄해야한다)

728x90

'프로그래밍 공부 > JavaScript' 카테고리의 다른 글

비동기식 처리모델 Ajax  (0) 2020.02.21
js - ES6 문법 정리  (0) 2020.02.15