2015-03-26 5 views
5

Uso le funzioni freccia in un'app e talvolta è necessario ottenere un riferimento alla funzione stessa. Per le normali funzioni javascript, posso solo nominarli e usare il nome dall'interno. Per le funzioni di freccia, attualmente sto usando arguments.callee. C'è un modo per nominare le funzioni di freccia in modo che un riferimento possa essere utilizzato dall'interno?C'è un modo per nominare le funzioni freccia in javascript?

codice di esempio

//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); 
    }); 
}; 

Quello che ho optato per dopo l'assistenza in quanto gli argomenti potrebbero non essere lì per sempre

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); 
    }); 
} 
+3

non è il punto principale di funzioni di direzione solo un modo più succinta di esprimere funzioni anonime, con la giusta 'this' vincolante? Quindi non avrebbero comunque nomi con l'equivalente JS. – GregL

+3

Sembra che dopo tutto non si vogliano le funzioni freccia, ma un'espressione di funzione con nome. –

+1

Nah. In realtà, voglio usare le funzioni della freccia e stanno funzionando bene. Comunque sto implementando un pezzo di codice (seguendo un tutorial) che richiede che io usi la funzione di chiamata come parte di un processo 'guarding'. Voglio sapere come evitare l'uso di arguments.callee evitando allo stesso tempo di dover modificare ogni funzione interessata a una normale funzione javascript. – ritcoder

risposta

9

Esiste un modo per funzioni nome freccia in modo che un riferimento può essere utilizzato dall'interno

A meno che non lo si assegni a una variabile. Per esempio:

var foo =() => { 
    console.log(foo); 
} 

Per le funzioni di direzione, Attualmente sto usando arguments.callee

arguments non sono supportati da funzioni di direzione. TS attualmente non consente correttamente di usarli. Questo sarà un errore nella prossima versione di dattiloscritto. This is to keep typescript arrow functions compatible with the JS Language Specification.

Per il vostro caso d'uso Vorrei solo uso un function

+0

Oh ok. Quindi il mio codice funziona ora perché dattiloscritto non sta attualmente convertendoli in es6. Dal momento che il dattiloscritto lo converte in semplice javascript, c'è un modo per farlo assegnare un nome alla funzione che genera? Ho un codice di esempio, quindi modificherò la domanda e la aggiungerò poiché non è ben formattata – ritcoder

+0

Scusa se non sono stato chiaro. 'arguments' sta per essere un errore indipendentemente dalla versione (es6, es5, es3) che stai prendendo di mira. Ho aggiornato la mia risposta – basarat

+0

@ritcoder Ho anche aggiunto un esempio di codice per spiegare cosa intendevo assegnare a una variabile – basarat