>  기사  >  웹 프론트엔드  >  `new` 키워드 없이 ES6 클래스를 호출하는 방법은 무엇입니까?

`new` 키워드 없이 ES6 클래스를 호출하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 03:18:02463검색

 How to Invoke ES6 Classes Without the `new` Keyword?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.