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