먼저 질문을 하기 이전에, 저는 클래스 필드의 작동원리부터 잘 알고 있지 못했기 때문에, 정리를 해봅니다.
클래스 필드는 클래스의 정적인 멤버 변수이며, 인스턴스와 상관없이 클래스 자체의 속성을 나타낸다.
고 합니다. 이게 무슨말인지 잘 모르겠더군요.. 그래서 이게 왜 필요한가에 대한 생각을 생각해봤습니다.
- 인스턴스의 프로퍼티로 변수나 메서드를 지정할 수 있게 됐습니다. 그럼 클래스의 자체의 변수는 못정하나? 메서드는 정적메서드라고하면••• 변수는?
클래스 자체의 속성..이라.. 그럼 실험을 해봅시다.
class Person {
name = "daeun";
constructor(age) {
this.age = age;
}
whatisyour = function () {
return this.name;
};
}
const onePerson = new Person(27);
console.log(onePerson); // Person {name: 'daeun', age: 27, whatisyour: ƒ}
console.log(onePerson.whatisyour()); // daeun
보면 클래스 피드에서 변수와 함수(함수표현식)를 만들어보았습니다. 함수 표현식으로 적은 이유는, 함수선언문을 적게되면 인스턴스의 프로토타입 메서드가 되기 때문에 표현식으로 적었습니다. 즉, 클래스 필드의 함수를 할당하기 위해서는 함수 표현식으로 적어야합니다.
인스턴스를 새로 만들어보니, 클래스의 클래스필드가 모두 인스턴스의 프로퍼티가 되어버립니다. 함수까지도요. 않의;; 이거왜써
- constructor에 변수를 만드는것과는 무슨차이임?;;
- 그럼 함수할당한것도 걍 메서드로 만드는거랑 무슨차이임?
그럼 인스턴스에 변수, 함수를 계속 직접적으로 만들어주는 건데, 프로토타입메서드를 활용하는 방식에 비해 비효율적으로 보입니다. 왜쓰죠?
하지만 클래스 필드에 함수를 할당하는 것은 권장치 않는 방식이라고 한다.