2016-06-04 12 views
6

Zajmuję się tworzeniem strony internetowej za pomocą stosu node.js/express i staram się rozwijać w funkcjonalnym stylu, który jest dla mnie całkiem nowy. Metoda ekspresowa res.send wymaga, aby funkcja była wywoływana jako metoda, ponieważ odnosi się ona do ciała, ale metody wywoływania nie działają naturalnie w stylu funkcjonalnym.Metody enkapsulacji za Gettersami

Możesz umieścić metodę stojącą za funkcją gettera, która zamienia ją w funkcję, ale nie wiem, czy są jakieś minusy tego niż złożoność kodu?

Przykład:

(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

Czy tutaj swoje pytanie „Czy enkapsulacji funkcję w getter mają jakieś wady oprócz kodu złożoności?”? Jeśli tak, upewnij się, że jest to jasne. – rcdmk

Odpowiedz

1

Ostatecznie to zależy od dokładnego przypadków użycia, ale dodanie funkcji owinięcie jest dość typowe w javascript i węzła i jest mało prawdopodobne, aby dodać jakieś wady. można naprawić ten błąd jest wyświetlane podczas wywoływania wrapper(a.bar); // throws an error z wykorzystaniem bind, jak poniżej:

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

Wywołanie bind zapewni this jest ustawiony prawidłowo, gdy funkcja nazywa się później.

Oto demo: https://jsfiddle.net/zuL9g98m/

Powiązane problemy