Если вы используете Dojo, вы просто вызываете dojo.hitch (), который делает почти то, что вы хотите. Почти & mdash; потому что он также может быть использован для упаковки контекста. Но ваш пример первый:
dojo.hitch(out, "hello")("world");
dojo.hitch(out, "hello", "world")();
А также:
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.hitch () является частью базы Додзё, поэтому, как только вы включите dojo.js, она для вас.
Другое общее средство доступно в модуле dojox.lang.functional.curry (задокументировано в Функциональное развлечение в JavaScript с помощью Dojo & mdash; просто посмотрите на эту страницу "curry"). В частности, вы можете захотеть взглянуть на curry () и part ().
curry () накапливает аргументы (как в вашем примере), но с одним отличием: как только арность удовлетворяется, она вызывает функцию, возвращающую значение. Реализация вашего примера:
df.curry(out)("hello")("world");
df.curry(out)("hello", "world");
Обратите внимание, что в конце последней строки нет "()" & mdash; он вызывается автоматически.
partal () позволяет произвольно заменять аргументы:
df.partial(out, df.arg, "world")("hello");