Javascript/ECMAScript 2015 (ES6)

객체 리터럴 프로퍼티 기능 확장 - 문법 | Poiemaweb

AGAL 2020. 2. 17. 22:45
반응형

[출처 : https://poiemaweb.com]

1. 프로퍼티 축약 표현

ES6에서는 프로퍼티 값으로 변수를 사용하는 경우, 프로퍼티 이름을 생략(Property shorthand)할 수 있다.

이때 프로퍼티 이름은 변수의 이름으로 자동 생성된다.

var x = 1, y = 2;

// ES5 :  객체 리터럴의 프로퍼티는 이름과 값으로 구성된다. 프로퍼티의 값은 변수에 할당된 값일 수도 있다.
var Object = {
  x: x,
  y: y
}

// ES6 : 프로퍼티의 값으로 변수를 사용할 경우, 이름은 생략 가능. *프로퍼티 이름 = 변수의 이름
const Object = { x, y };

console.log(Object);    // {x: 1, y: 2}

2. 프로퍼티 키 동적 생성

문자열 또는 문자열로 변환 가능한 값을 반환하는 표현식을 사용해 프로퍼티 키를 동적으로 생성할 수 있다.

단, 프로퍼티 키로 사용할 표현식을 대괄호([…])로 묶어야 한다. 이를 계산된 프로퍼티 이름(Computed property name)이라 한다.

var prefix = "prop";
var i = 0;

// ES5 : 프로퍼티 키를 동적으로 생성하려면 객체 리터럴 외부에서 대괄호([…]) 표기법을 사용
var Object = {};
object[prefix + "-" + ++i] = i;
object[prefix + "-" + ++i] = i;

// ES6 : 객체 리터럴 내부에서도 프로퍼티 키를 동적으로 생성
const Object = {
  [`${prefix}-${++i}`]: i,
  [`${prefix}-${++i}`]: i
}

console.log(Object);    // {prop-1: 1, prop-2: 2}    

3. 메소드 축약 표현

var Object = {
  name: "AGAL",
  // ES5 : 메소드를 선언하려면 프로퍼티 값으로 함수 선언식을 할당한다.
  say: function(){
    console.log("Hi " + this.name);
  }
  
  // ES6 : 메소드를 선언할 때, function 키워드를 생략한 축약 표현을 사용 가능.
  say() {
    console.log("Hi " + this.name);
  }
}
Object.say();    // Hi AGAL

4. __proto__ 프로퍼티에 의한 상속

ES6에서는 객체 리터럴 내부에서 __proto__ 프로퍼티를 직접 설정할 수 있다.

이것은 객체 리터럴에 의해 생성된 객체의 __proto__ 프로퍼티에 다른 객체를 직접 바인딩하여 상속을 표현할 수 있음을 의미한다.

var parent = {
  name: "parent",
  say : function(){
    console.log("Hi " + this.name);
  }
}

// ES5 : 객체 리터럴을 상속하기 위해서는 Object.create() 함수를 사용 *프로토타입 패턴 상속
var child = Object.create(parent);
child.name = "child";

// ES6 : child 객체의 프로토타입 객체에 parent 객체를 바인딩하여 상속을 구현한다.
const child = {
  __proto__: parent,
  name: "child"
}

parent.say();    // Hi parent
child.say();    // Hi Child   

Reference

반응형