Klassenkonstruktor
JavaScript-Funktionen dienen auch als Konstruktoren von Klassen. Solange Sie also eine Funktion deklarieren, können Sie das Schlüsselwort new verwenden, um eine Instanz der Klasse zu erstellen.
function Person(name) { this.name = name; this.toString = function() { return 'Hello, ' + this.name + '!'; }; } var p = new Person('Ghostheaven'); alert(p); // Hello, Ghostheaven!
Im obigen Beispiel wird die Person-Funktion als Konstruktor der Klasse verwendet. Dies zeigt auf das neu erstellte Instanzobjekt. Sie können der Instanz Eigenschaften und Methoden hinzufügen Ausführliche Informationen zur objektorientierten JavaScript-Programmierung finden Sie in diesem Artikel. Worüber ich hier sprechen möchte, ist das Problem des Rückgabewerts, wenn JavaScript-Funktionen als Klassenkonstruktoren verwendet werden.
function MyClass(name) { this.name = name; return name; // 构造函数的返回值? } var obj1 = new MyClass('foo'); var obj2 = MyClass('foo'); var obj3 = new MyClass({}); var obj4 = MyClass({});
Der obige Konstruktor ist etwas ganz Besonderes, er hat eine Return-Anweisung. Auf welche Objekte zeigen also obj1~obj4 jeweils? Das eigentliche Ergebnis ist dieses:
obj1 = MyClass对象 obj2 = 'foo' obj3 = {} obj4 = {}
Funktionsklasse
Es gibt eine integrierte Klasse namens Function in der JavaScript-Laufzeit. Das Deklarieren einer Funktion mit dem Schlüsselwort function ist tatsächlich eine Möglichkeit, eine Funktionsklasse zu erstellen Objekt. In Kurzform verfügen alle Funktionen über alle Methoden der Funktionsklasse, z. B. Aufruf, Anwenden, Binden usw. Diese Anweisung kann über das Schlüsselwort „instanceof“ überprüft werden.
Da Function eine Klasse ist, ist ihr Konstruktor Function (selbst ist auch ein Objekt der Function-Klasse), und es sollte möglich sein, ein Funktionsobjekt über das neue Schlüsselwort zu generieren. Hier kommt das erste Monster: Wie man eine Funktion mithilfe der Function-Klasse erstellt. Die Syntax von Function lautet wie folgt:
new Function ([arg1[, arg2[, ... argN]],] functionBody)
wobei arg1, arg2, ... argN Zeichenfolgen sind, die Parameternamen darstellen, und functionBody ebenfalls eine Zeichenfolge ist, die den Funktionskörper darstellt. Die vorhergehenden Parameternamen sind optional, der Konstruktor der Funktion behandelt den letzten Parameter als Funktionskörper und die vorherigen werden als Parameter behandelt.
var func1 = new Function('name', 'return "Hello, " + name + "!";'); func1('Ghostheaven'); // Hello, Ghostheaven!
Die obige Methode erstellt eine Funktion über Function. Diese Funktion ist genau die gleiche wie andere mit dem Schlüsselwort function deklarierte Funktionen.
Die Funktionsklasse hat ihre einzigartige Verwendung. Sie können sie verwenden, um verschiedene Funktionslogiken dynamisch zu generieren oder die Funktion der Auswertungsfunktion zu ersetzen und zu verhindern, dass die aktuelle Umgebung verschmutzt wird*.
Selbstaktualisierende Funktion
In vielen Sprachen kann eine Funktion mit demselben Namen nicht erneut deklariert werden, da sonst ein Syntaxfehler auftritt. Funktionen in JavaScript können jedoch nicht nur deklariert werden wiederholt erklärt, sondern auch selbst aktualisieren. Das Monster, das sich selbst frisst, ist da!
function selfUpdate() { window.selfUpdate = function() { alert('second run!'); }; alert('first run!'); } selfUpdate(); // first run! selfUpdate(); // second run!
Diese Art von Funktion kann für Logik verwendet werden, die nur einmal ausgeführt wird, und die gesamte Logik wird nach der ersten Ausführung durch eine neue Logik ersetzt.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des JavaScript-Klassenkonstruktors und Beispiele für selbstaktualisierende Funktionscodes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!