Ich benutze Pfeil-Funktionen in einer App und manchmal ist es notwendig, einen Verweis auf die Funktion selbst zu bekommen. Für normale JavaScript-Funktionen kann ich sie einfach benennen und den Namen von innen verwenden. Für Pfeilfunktionen verwende ich derzeit arguments.callee
. Gibt es eine Möglichkeit, Pfeilfunktionen so zu benennen, dass eine Referenz von innen verwendet werden kann?Gibt es eine Möglichkeit, Pfeilfunktionen in Javascript zu benennen?
Beispielcode
//typescript
private evaluateIf(expr: parserModule.IIfExpression, callback: IEnvCallback) {
this.evaluate(expr.condition, proceed=> {
guard(arguments.callee, arguments, this);
if (proceed !== false) this.evaluate(expr.then, callback);
else if (expr.else) this.evaluate(expr.else, callback);
else callback(false);
});
}
//javascript
Environment.prototype.evaluateIf = function (expr, callback) {
var _this = this;
this.evaluate(expr.condition, function (proceed) {
guard(arguments.callee, arguments, _this);
if (proceed !== false)
_this.evaluate(expr.then, callback);
else if (expr.else)
_this.evaluate(expr.else, callback);
else
callback(false);
});
};
Was ich nach der Hilfe ließ sich auf, da Argumente es nicht für immer sein könnte
private evaluateIf(expr: parserModule.IIfExpression, callback: IEnvCallback) {
var fn;
this.evaluate(expr.condition, fn = proceed=> {
guard(fn, [proceed], this);
if (proceed !== false) this.evaluate(expr.then, callback);
else if (expr.else) this.evaluate(expr.else, callback);
else callback(false);
});
}
Ist das nicht der wichtigste Punkt der Pfeil Funktionen nur prägnante Weise anonyme Funktionen auszudrücken, mit dem richtigen 'this' Bindung? Daher hätten sie sowieso keine Namen mit dem JS-Äquivalent. – GregL
Sieht so aus, als ob Sie keine Pfeilfunktionen, sondern einen benannten Funktionsausdruck möchten. –
Nein. Eigentlich möchte ich die Pfeilfunktionen nutzen und sie funktionieren gut. Allerdings implementiere ich ein Stück Code (nach einem Tutorial), das erfordert, dass ich die aufrufende Funktion als Teil eines "Guarding" -Prozesses benutze. Ich möchte wissen, wie man arguments.callee vermeidet und gleichzeitig vermeidet, jede Funktion, die von einer normalen JavaScript-Funktion betroffen ist, zu ändern. – ritcoder