2016-06-04 15 views
6

Sto sviluppando un sito Web utilizzando lo stack node.js/express e sto cercando di sviluppare lo stile funzionale che è abbastanza nuovo per me. Il metodo espresso res.send richiede che la funzione venga chiamata come metodo poiché fa riferimento a this nel corpo, ma i metodi di chiamata non funzionano in modo naturale nello stile funzionale.Metodi di incapsulamento dietro Getters

È possibile inserire il metodo dietro una funzione getter che lo trasforma in una funzione, ma non so se ci siano degli svantaggi rispetto a questa diversa dalla complessità del codice?

Esempio:

(function() { 
"use strict"; 

function Foo() { 
    function bar() { 
    console.log(this.x); 
    } 
    return { 
    bar, 
    get baz() { 
     var s = this; 
     return() => s.bar(); 
    } 
    } 
} 

var a = new Foo(); 
a.x = 5; 
a.bar(); 
a.baz(); 

var b = a.bar; 
var c = a.baz; 
//b(); // throws an error because `this` is not defined 
c(); 

function wrapper(f) { 
    f(); 
} 

//wrapper(a.bar); // throws an error 
wrapper(a.baz); 

})(); 
+0

è la tua domanda qui "non incapsulare una funzione in un getter sono aspetti negativi a parte la complessità del codice?"? Se è così, assicurati di dirlo chiaro, per favore. – rcdmk

risposta

1

In ultima analisi, dipende dal vostro esatto caso d'uso, ma l'aggiunta di funzioni wrapper è abbastanza tipico in javascript e Node ed è improbabile che aggiungere eventuali lati negativi. È possibile correggere l'errore che stai vedendo quando si chiama wrapper(a.bar); // throws an error con l'uso di bind, come di seguito:

wrapper(a.bar.bind(a));

Calling bind farà in modo che this è impostato in modo appropriato quando la funzione viene chiamata più tardi.

Ecco una demo: https://jsfiddle.net/zuL9g98m/