Heim Web-Frontend js-Tutorial Kann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?

Kann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?

Dec 17, 2024 am 09:31 AM

Can JavaScript's `new` Operator Work with the `.apply()` Method?

Kann die .apply()-Methode mit dem neuen Operator verwendet werden?

In JavaScript wird normalerweise eine Objektinstanz mit dem neuen Operator erstellt beinhaltet die explizite Übergabe von Argumenten an den Konstruktor. Es könnte jedoch wünschenswert sein, stattdessen eine variable Anzahl von Argumenten zu übergeben. Diese Frage untersucht die Möglichkeit, die .apply()-Methode in Verbindung mit dem neuen Operator zu verwenden, um diese Flexibilität zu erreichen.

Die Herausforderung

Zunächst könnte man versuchen, die folgender Code:

function Something() {
    // init stuff
}
function createSomething() {
    return new Something.apply(null, arguments);
}
var s = createSomething(a, b, c); // 's' is an instance of Something
Nach dem Login kopieren

Dieser Ansatz funktioniert jedoch nicht, da der neue Operator nicht mit .apply() kompatibel ist Methode.

Lösungen

Verschiedene Lösungen wurden vorgeschlagen, um diese Einschränkung zu überwinden:

1. Matthew Crumleys Methode

Diese Lösung verwendet eine Zwischenfunktion, die vom Zielkonstruktor erbt:

var createSomething = (function() {
    function F(args) {
        return Something.apply(this, args);
    }
    F.prototype = Something.prototype;

    return function() {
        return new F(arguments);
    }
})();
Nach dem Login kopieren

2. Function.prototype.bind

ECMAScript5 führt die Methode Function.prototype.bind ein, die die teilweise Anwendung von Funktionen ermöglicht:

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

Dies kann wie folgt verwendet werden:

var s = newCall(Something, a, b, c);
Nach dem Login kopieren

Vorteile der Verwendung Function.prototype.bind

Dieser Ansatz hat mehrere Vorteile:

  • Es funktioniert mit allen Konstruktoren, auch mit speziellen Konstruktoren wie Date.
  • Das kann sein Wird prägnant verwendet und übergeben Argumente direkt an new.
  • Es behält den ursprünglichen Konstruktor bei Prototyp.

Erklärung

Function.prototype.bind erstellt eine neue Funktion, die die Eigenschaften der ursprünglichen Funktion erbt. Indem wir die Konstruktorfunktion teilweise mit den gewünschten Argumenten anwenden, können wir dann eine Instanz mit dem neuen Schlüsselwort erstellen.

Das obige ist der detaillierte Inhalt vonKann der „neue' Operator von JavaScript mit der Methode „.apply()' funktionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Ersetzen Sie Stringzeichen in JavaScript

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Benutzerdefinierte Google -Search -API -Setup -Tutorial

Beispielfarben JSON -Datei Beispielfarben JSON -Datei Mar 03, 2025 am 12:35 AM

Beispielfarben JSON -Datei

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

8 atemberaubende JQuery -Seiten -Layout -Plugins

10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

10 JQuery Syntax Highlighters

Was ist ' this ' in JavaScript? Was ist ' this ' in JavaScript? Mar 04, 2025 am 01:15 AM

Was ist ' this ' in JavaScript?

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Erstellen Sie Ihre eigenen AJAX -Webanwendungen

10 JavaScript & JQuery MVC -Tutorials 10 JavaScript & JQuery MVC -Tutorials Mar 02, 2025 am 01:16 AM

10 JavaScript & JQuery MVC -Tutorials

See all articles