ES6에서 프로그래머는 class 키워드를 사용하여 익명 클래스를 정의하고 new 연산자를 사용하여 즉시 인스턴스화할 수 있습니다.
<code class="javascript">var entity = new class { constructor(name) { this.name = name; } getName() { return this.name; } }('Foo');</code>
편리해 보일 수 있지만 기본 동작과 잠재적인 단점을 이해하는 것이 중요합니다.
뒤에서 새 클래스 표현식은 새 생성자를 만듭니다. 함수와 프로토타입 객체는 평가될 때마다 생성됩니다. 이는 모든 인스턴스에서 공유되는 단일 생성자와 프로토타입을 정의하는 일반 클래스 선언과 다릅니다.
a. 과도한 메모리 소비:
즉시 인스턴스화를 사용하면 새 클래스 표현식을 사용하여 객체가 생성될 때마다 새로운 생성자와 프로토타입이 생성됩니다. 이는 특히 수많은 객체가 인스턴스화되는 경우 불필요한 메모리 소비로 이어질 수 있습니다.
b. 상속 부족:
새 클래스 패턴을 사용하여 생성된 개체는 상위 생성자에서 상속되지 않거나 공통 프로토타입을 공유하지 않습니다. 따라서 상속, 메소드 재사용, 다형성과 같은 클래스의 이점을 잃게 됩니다.
일부 개발자는 이 패턴을 사용하여 싱글톤 객체를 생성할 수도 있지만 효과적이지 않습니다. 생성자 함수는 여전히 액세스 가능하며, 싱글톤의 목적을 무시하면서 새로운 엔터티 생성자를 사용하여 두 번째 인스턴스를 생성할 수 있습니다.
이러한 단점으로 인해 다음을 강력히 권장합니다. 새로운 클래스 패턴을 사용합니다. 대신 단순성, 가독성 및 인스턴스화 효율성을 위해 기존 객체 리터럴을 선호하세요.
<code class="javascript">var entity = { name: 'Foo', getName() { return this.name; } };</code>
위 내용은 익명 클래스 인스턴스로 문제 해결: 이 JavaScript 함정을 언제, 어떻게 피할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!