2016-12-07 1 views
-1

J'essaie d'apprendre le javascript fonctionnel avec Ramda et je suis coincé avec cela. Voici la JS Bin: http://jsbin.com/kozeka/Ramda échoue avec la fonction setDate

Et voici le code:

const date = new Date() 
const addDays = R.add(date.getDate()) 
const getDate = R.compose(date.setDate, addDays) 

console.log(date.setDate(date.getDate() + 6)) //Works 
console.log(date.setDate(R.add(date.getDate(), 6))) // Works 
console.log(date.setDate(addDays(6))) //Works 
console.log(getDate(6)) //Doesn't Work 

Mais j'eu cette erreur. Qu'est-ce que je fais mal?

"TypeError: Method Date.prototype.setDate called on incompatible receiver undefined 
    at setDate (<anonymous>) 
    at http://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js:6:3064 
    at http://cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js:6:182 
    at kozeka.js:10:38" 
+0

Alors, où la programmation fonctionnelle ne vient en? – naomik

+0

@naomik: Ramda est "une bibliothèque fonctionnelle pratique pour les programmeurs Javascript"; 'R.compose (date.setDate, addDays)' est la programmation fonctionnelle. – Amadan

+0

@Amadan la programmation fonctionnelle est plus que juste en utilisant Ramda ou une composition de fonction. – naomik

Répondre

1

Le problème est que le setDate perd la date par exemple lié lorsqu'il est passé en fonction.

Cela peut être résolu en liant explicitement la méthode à l'instance date lors du passage à compose:

const getDate = R.compose(date.setDate.bind(date), addDays)