>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 `.apply()`를 `new` 연산자와 함께 사용하여 가변 인수가 있는 객체를 만들 수 있나요?

JavaScript에서 `.apply()`를 `new` 연산자와 함께 사용하여 가변 인수가 있는 객체를 만들 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-11 14:15:11690검색
Can You Use `.apply()` with the `new` Operator in JavaScript to Create Objects with Variable Arguments?
'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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