ES6: 클래스 생성자 호출을 위한 새로운 키워드 우회
ES6에서 클래스는 객체의 청사진 역할을 할 뿐만 아니라 생성자를 구현하는 역할도 합니다. . constructor() 함수는 클래스 본문 역할을 하며 클래스가 호출될 때 실행이 시작됩니다. 그러나 필수 new 키워드 없이 클래스를 호출하려고 하면 "클래스를 함수로 호출할 수 없습니다"라는 오류 메시지가 나타나는 경우가 많습니다.
생성자 명령 이해
클래스는 본질적으로 new 연산자에 연결되어 있어 인스턴스화 시 클래스의 새 인스턴스가 생성되도록 합니다. new 없이 클래스를 호출하는 것은 이 디자인 원칙에 어긋나며 앞서 언급한 오류로 이어집니다.
대체 솔루션
원하는 동작이 new가 있거나 없이 클래스 호출을 허용하는 것이라면 , 여러 대안이 존재합니다:
1. 클래스 대신 일반 함수 사용
일반 함수는 새로운 요구 사항 없이 클래스와 유사한 동작을 모방할 수 있습니다. 이를 사용하여 여전히 인스턴스와 유사한 동작을 적용할 수 있지만 클래스의 캡슐화 및 상속 기능이 부족합니다.
<code class="js">function Foo(x) { this.x = x; this.hello = function() { return this.x; }; }</code>
2. new 키워드 적용
항상 new를 사용하여 클래스를 호출하는 것이 의도된 목적이라면 해결 방법이 필요하지 않습니다. 권장되는 생성자 호출 패턴(
<code class="js">(new Foo("world")).hello(); // "hello world"</code>
3)을 따르기만 하면 됩니다. 일반 함수로 클래스 래핑
이 접근 방식은 클래스 사용의 이점을 유지하면서 new를 사용하거나 사용하지 않고 클래스를 호출할 수 있는 유연성을 제공합니다. 래핑 함수는 항상 new를 사용하여 클래스 생성자를 호출합니다.
<code class="js">class Foo { constructor(x) { this.x = x; } hello() { return `hello ${this.x}`; } } var _old = Foo; Foo = function(...args) { return new _old(...args) }; Foo("world").hello(); // "hello world" (new Foo("world")).hello(); // Also works</code>
위 내용은 `new` 키워드 없이 ES6 클래스를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!