'new'와 함께 .apply()의 제한 사항
그렇음에도 불구하고 다양성을 위해 '.apply()' 메소드는 'new' 연산자와 함께 직접 사용될 수 없습니다. 그렇게 시도하면 예상치 못한 동작이나 오류가 발생할 수 있습니다.
대체 솔루션
이러한 기능의 필요성을 인식하여 JavaScript 커뮤니티에서는 다양하고 혁신적인 솔루션을 제안했습니다.
함수 프로토타입
Matthew Crumley의 공로를 인정받은 한 가지 접근 방식은 함수 프로토타입을 활용하여 해결 방법:
이 솔루션은 원하는 동작으로 새 함수를 효과적으로 생성합니다.
ECMAScript 5
ECMAScript 5의 'Function.prototype.bind'는 더욱 깔끔한 솔루션을 제공합니다. :
var createSomething = (function() {
function F(args) {
return Something.apply(this, args);
}
F.prototype = Something.prototype;
return function() {
return new F(arguments);
}
})();
로그인 후 복사
이 방법은 'new' 연산자와 완벽하게 통합되며 'Date'와 같은 특별한 동작을 포함하는 모든 유형의 생성자에 적용됩니다.
평가 방법(주의)
잠재적인 보안 문제로 인해 권장되지 않지만 'eval' 방법은 또 다른 기능을 제공합니다. 해결 방법:
function newCall(Cls) {
return new (Function.prototype.bind.apply(Cls, arguments));
}
로그인 후 복사
솔루션 이해
이러한 솔루션은 바인딩() 메서드를 활용하여 원하는 인수를 받아들이는 함수. 그런 다음 'new' 연산자를 사용하여 해당 함수에서 객체를 인스턴스화합니다.
결론
var s = eval("new Something(" + [a, b, c] + ")");
로그인 후 복사
'.apply()' 및 'new' 연산자를 사용하여 가변 인수가 있는 객체를 생성하려면 약간의 요구 사항이 필요합니다. 독창성. 개발자는 사용 가능한 JavaScript 기능을 활용하여 이러한 기술을 구현하여 원하는 기능을 달성할 수 있습니다.
위 내용은 JavaScript에서 `.apply()`를 `new` 연산자와 함께 사용하여 가변 인수가 있는 객체를 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!