https://wikibook.co.kr/mjs/, P.474 ~
const power = x => x ** 2;
// 위 표현은 다음과 동일하다.
const power = x => { return x ** 2; };
{ return
값으로 평가될 수 있는 표현식인 문 }
const arrow = x => { ... };
const arrow = () => { ... };
const arrow = () => { const x = 1; };
const create = (id, content) => ({id, content});
화살표 함수는 함수 자체의 this 바인딩을 갖지 않고, 언제나 상위 스코프의 this 바인딩을 참조한다.
const person = {
name: 'Lee',
sayHi: () => console.log(`Hi ${this.name}`)
};
// sayHi 프로퍼티에 할당된 화살표 함수 내부의 this는 상위 스코프인 전역의 this가 가리키는
// 전역 객체를 가리키므로 이 예제를 브라우저에서 실행하면 this.name은 빈 문자열을 갖는 window.name과 같다.
// 전역 객체 window에는 빌트인 프로퍼티 name이 존재한다.
person.sayHi(); // Hi
class Person {
name = 'Lee';
sayHi = () => console.log(`Hi ${this.name}`);
}
const person = new Person();
person.sayHi(); // Hi Lee
console.log(person.hasOwnProperty('sayHi')) // true
console.log(Person.prototype.hasOwnProperty('sayHi')) // false
메서드를 정의할 때는 ES6 메서드 축약 표현으로 정의한 ES6 메서드를 사용하는 것이 좋다.
class Person {
name = 'Lee';
sayHi() {
console.log(`Hi ${this.name}`);
}
}
const person = new Person();
person.sayHi(); // Hi Lee
console.log(person.hasOwnProperty('sayHi')) // false
console.log(Person.prototype.hasOwnProperty('sayHi')) // true