>웹 프론트엔드 >JS 튜토리얼 >JavaScript 객체를 생성하기 위해 `.apply()`를 `new` 연산자와 함께 사용할 수 있습니까?

JavaScript 객체를 생성하기 위해 `.apply()`를 `new` 연산자와 함께 사용할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 21:15:14844검색

Can `.apply()` be Used with the `new` Operator to Create JavaScript Objects?

'new' 연산자로 .apply()의 기능 확장

JavaScript에서 .apply() 메소드는 다음과 같은 기능을 허용합니다. 지정된 객체 컨텍스트와 배열로 전달된 인수로 호출됩니다. 그러나 질문이 생깁니다. .apply()를 'new' 연산자와 함께 사용하여 객체 인스턴스를 생성할 수 있습니까?

제공하신 초기 코드 조각에서 이 작업을 시도했지만 안타깝게도 이 접근 방식은 다음과 같습니다. JavaScript에서는 기본적으로 지원되지 않습니다.

그러나 이러한 제한을 극복하기 위해 제안된 몇 가지 영리한 솔루션이 있습니다. 특히 우아한 접근 방식 중 하나는 ECMAScript5에서 Function.prototype.bind를 사용하는 것입니다.

function newCall(Cls) {
    return new (Function.prototype.bind.apply(Cls, arguments));
}

이 함수는 생성자에 전달되어야 하는 추가 인수와 함께 클래스나 생성자를 첫 번째 인수로 허용합니다. 그런 다음 Function.prototype.bind를 사용하여 생성자와 동일한 컨텍스트와 미리 바인딩된 추가 인수를 갖는 새 함수를 만듭니다. 마지막으로 'new' 키워드는 이 바인딩된 함수를 기반으로 새 객체 인스턴스를 생성하는 데 사용됩니다.

또 다른 가능한 해결책은 eval() 함수를 사용하는 것입니다.

function evalConstructor(str, args) {
    return eval('new (' + str + ')(' + args + ')');
}

이 함수는 생성자와 인수 배열을 나타내는 문자열 표현식을 만든 다음 해당 문자열을 JavaScript 표현식으로 평가합니다. 결과 코드는 기본적으로 new 연산자를 직접 사용하는 것과 동일하지만 가변 개수의 인수를 전달할 수 있습니다.

이러한 솔루션은 가변 개수의 인수로 객체 인스턴스를 생성하는 편리한 방법을 제공하여 JavaScript 생성자 메커니즘의 기능.

위 내용은 JavaScript 객체를 생성하기 위해 `.apply()`를 `new` 연산자와 함께 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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