In JavaScript sind Funktionen einfach Objekte, die aufgerufen werden können. Also, was ist der einfachste Weg für den Körper einer Funktion, das tatsächliche Funktionsobjekt zu referenzieren?
this
kann verwendet werden, um auf das enthaltene Objekt zu verweisen, von dem eine Funktion (oder genauer gesagt eine Methode) aufgerufen wird. Aber ich glaube, this
bezieht sich niemals auf das eigentliche Funktionsobjekt selbst.
Offensichtlich kann bind
, call
oder apply
verwendet werden, um den Wert von this
für die Funktion zu ändern. Oder bind
könnte verwendet werden, um eine Version der Funktion zu erstellen, die immer einen Verweis auf sich selbst als ihren ersten Parameter erhält.
Aber gibt es einen einfacheren Weg? Ich vermute nicht, aber ich könnte falsch liegen.
Ich kann mir keinen Fall vorstellen, in dem ein benannter Funktionsausdruck keinen anonymen Funktionsausdruck ersetzen kann. Daher würde ich vorschlagen, die Funktion zu benennen, wenn Sie sie von sich aus aufrufen wollen (d. H., Wenn Sie Rekursion verwenden wollen):
%Vor%Dies funktioniert auch, wenn es sich um eine Referenz handelt:
%Vor%Sie können sogar einen rekursiven IIFE (sofort aufgerufenen Funktionsausdruck) verwenden, wenn Sie den Namensraum nicht verschmutzen wollen:
%Vor%Außerdem tun Sie etwas wie folgt:
%Vor%Funktioniert auch und verschmutzt nicht den Namensraum.
Das ist eigentlich eine Frustration von mir, weil Sie in der Lage waren, arguments.callee zu verwenden, was Ihnen einen Hinweis auf die Funktion geben würde. Wie jemand anderes erwähnt, ist dies nicht mehr möglich.
Dafür gibt es ein Muster ... und das heißt, die Funktion selbst zu benennen und zuzuweisen. Es sieht so aus:
%Vor% Auf diese Weise können Sie auf die benannte Funktion verweisen und Ihr Geschäft weiterverfolgen. Beachten Sie, dass Sie die .call
-Syntax verwenden müssen, wenn Sie sie als Methode bezeichnen möchten (so dass this
eine Bedeutung hat), aber abgesehen davon ist es ziemlich einfach.
Eine andere Möglichkeit besteht darin, einen wirklich funktionalen Ansatz zu machen, bei dem Sie das zu operierende Objekt an eine Funktion übergeben:
%Vor%Man könnte argumentieren, dass dies besser und flexibler ist. Ich denke, es ist eine Frage des Geschmacks, wirklich.
Ich würde Ihren Funktionen einen Namen geben und sie dann verwenden, um sie zu referenzieren. Wenn Sie eine deklarierte Funktion oder eine Funktionsvariable haben, hat sie bereits einen Namen.
%Vor%Wenn Sie eine anonyme Funktion haben, können Sie ihr einen Namen geben. Dieser Name wird nur innerhalb der Funktion existieren.
%Vor%Tags und Links javascript