JavaScript에서 apply() 메서드를 사용하면 임의 개수의 인수를 배열로 전달할 수 있습니다. 사전 정의된 기능으로 확장하여 잠재적으로 기능을 확장합니다. 그러나 객체 인스턴스화에 필수적인 new 연산자와 결합하면 이 접근 방식은 고유한 과제를 제시합니다. 생성자는 일반적으로 고정된 수의 인수를 기대합니다.
제 질문은 객체 인스턴스를 생성하려는 욕구에서 발생했습니다. 생성자에 인수를 동적으로 제공하면서 new 연산자를 사용합니다.
장애물:
처음에는 이 개념을 구현하려고 노력했습니다:
function Something(){ // Initializations } function createSomething(){ return new Something.apply(null, arguments); } var s = createSomething(a,b,c); //'s' is an instance of Something
그러나 이 접근 방식은 효과적이지 않은 것으로 판명되었습니다.
문제 해결:
대응하여 수많은 솔루션이 제안되었습니다. 내 쿼리에 적용했지만 apply()와 new 연산자의 완벽한 통합을 제공하는 제품은 없었습니다. 각각 고유한 장점과 주의 사항이 있는 대체 솔루션이 제안되었습니다.
선호 솔루션:
Matthew Crumley가 제안한 저에게 가장 마음에 드는 솔루션은 영리한 방법을 사용했습니다. Function.prototype.bind 및 중간 함수를 사용하는 접근 방식:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
이 접근 방식은 명확합니다. apply()를 사용하고 의도한 기능을 구현하는 별도의 함수 F를 사용합니다.
또 다른 실행 가능한 옵션:
Simon Lyall이 제공하는 또 다른 주목할만한 솔루션은 다음을 활용합니다. Function.prototype.bind 및 eval():
function createSomething(){ var args = [].slice.call(arguments), constr = eval("new ("+Something.name+"(" + args+ "))"); return constr; }
우아하고 간결하면서도 이 접근 방식은 eval()에 의존하므로 다양한 환경에서 보안 및 호환성에 대한 우려가 발생할 수 있습니다.
결론:
apply() 메서드는 이를 처리하는 강력한 방법을 제공하지만 동적 인수 수로 인해 new 연산자와의 직접 통합은 JavaScript에서 지원되지 않습니다. 대신, 유사한 기능을 달성하기 위해 대체 솔루션을 사용할 수 있으므로 다양한 인수를 사용하여 객체 인스턴스를 유연하게 생성할 수 있습니다.
위 내용은 JavaScript에서 'new' 연산자를 사용하여 생성자에 인수를 동적으로 전달하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!