Comment puis-je créer un objet JS avec des méthodes et un constructeur dans ClojureScript

Imaginez que la tâche est de créer un utilitaire lib dans clojurescript afin qu'il puisse être utilisé à partir de JS.

Par exemple, disons que je veux produire un équivalent de:

var Foo = function(a, b, c){ this.a = a; this.b = b; this.c = c; } Foo.prototype.bar = function(x){ return this.a + this.b + this.c + x; } var x = new Foo(1,2,3); x.bar(3); // >> 9 

Une façon d'y parvenir est venu avec:

  (deftype Foo [abc]) (set! (.bar (.prototype Foo)) (fn [x] (this-as this (+ (.a this) (.b this) (.c this) x)))) (def x (Foo. 1 2 3)) (.bar x 3) ; >> 9 

Question: y at-il une manière plus élégante / idiomatique de ce qui précède dans clojurescript?

Cela a été résolu avec JIRA CLJS-83 en ajoutant un protocole "Object" magique au deftype:

 (deftype Foo [abc] Object (bar [this x] (+ abcx))) (def afoo (Foo. 1 2 3)) (.bar afoo 3) ; >> 9 
 (defprotocol IFoo (bar [this x])) (deftype Foo [abc] IFoo (bar [_ x] (+ abcx))) (def afoo (Foo. 1 2 3)) (bar afoo 3) ; >> 9 

La manière idiomatique est de le faire.