Si vous utilisez Dojo vous suffit d'appeler dojo.attelage() qui n'est presque exactement ce que vous voulez. Presque, car il peut être utilisé pour emballer le contexte. Mais votre exemple est d'abord:
dojo.hitch(out, "hello")("world");
dojo.hitch(out, "hello", "world")();
Ainsi que:
var A = {
sep: ", ",
out: function(a, b){ console.log(a + this.sep + b); }
};
// using functions in context
dojo.hitch(A, A.out, "hello")("world");
dojo.hitch(A, A.out, "hello", "world")();
// using names in context
dojo.hitch(A, "out", "hello")("world");
dojo.hitch(A, "out", "hello", "world")();
dojo.attelage() est la partie du Dojo de Base, de sorte que dès que vous avez inclus dojo.js il est là pour vous.
Une autre installation est disponible dans les dojox.lang.fonctionnelle.curry module (documenté dans la Fonctionnelle de plaisir en JavaScript avec Dojo — il suffit de regarder sur cette page "curry"). Plus précisément, vous pouvez regarder curry () et partielle().
curry() accumule les arguments (comme dans votre exemple), mais avec une différence: dès que l'arité est convaincu qu'il appelle la fonction retournant une valeur. La mise en œuvre de votre exemple:
df.curry(out)("hello")("world");
df.curry(out)("hello", "world");
Notez que la dernière ligne n'a pas de "()" à la fin — il est appelé automatiquement.
partielle() permet de remplacer des arguments au hasard:
df.partial(out, df.arg, "world")("hello");