class field는 곧 표준화될 문법이다.
class field는 public, private field 2가지가 있으며 데이터프로퍼티를 만든다.
class User{
name; // public class field
#age; // private class field
constructor(){
this.name='lee';
this.#age=45;
}
getAge(){
return this.#age;
}
}
let user = new User();
console.log(user.#age); // SyntaxError
console.log(user.age); // undefined
private class field에 #을 붙이고 내분에서 #을 붙여 사용하면 되고 외부에서 속성접근자에 #을 붙이면 SyntaxError가 발생한다.
class field는 객체마다 만들어지는 프로퍼티다.
class User {
name = prompt("이름을 알려주세요.", "보라");
}
let user = new User();
alert(user.name); // 보라
클래스필드에 복작한 표현식이나 함수를 사용할 수 있다.
class field에 화살표함수 + this 가 사용되면 바인딩된다.
class User{
#firstname;
#lastname;
constructor(firstname, lastname){
this.#firstname=firstname;
this.#lastname=lastname;
}
getFullname=()=>`${this.#firstname} ${this.#lastname}`;
}
let user = new User('lee', 'jh');
console.log(user.getFullname());
getFullname 클래스필드에 화살표함수를 사용하면 객체마다 메소드가 생성되며 화살표함수내 this는 생성객체로 바인딩된다.
class Animal {
name = 'animal';
constructor() {
console.log(this.name);
}
}
let ani = new Animal();
객체생성시 클래스필드는 constructor가 실행될때 가장 먼저 프로퍼티로 처리된다.