Nếu bạn sử dụng Dojo bạn chỉ cần gọi dojo.hitch() gần như chính xác những gì bạn muốn. Hầu như — bởi vì nó có thể được sử dụng để đóng gói bối cảnh là tốt. Nhưng ví dụ của bạn là đầu tiên:
dojo.hitch(out, "hello")("world");
dojo.hitch(out, "hello", "world")();
Cũng như:
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() là một phần của cơ sở Dojo, vì vậy ngay sau khi bạn bao gồm dojo.js nó ở đó cho bạn.
Một cơ sở chung khác có sẵn trong mô-đun dojox.lang.functional.curry (được ghi trong Functional fun in JavaScript with Dojo — chỉ cần xem trên trang này để "cà ri"). Cụ thể, bạn có thể muốn xem curry() và partial().
curry() tích lũy các đối số (như trong ví dụ của bạn) nhưng với một sự khác biệt: ngay sau khi arity hài lòng, nó gọi hàm trả về giá trị. Triển khai ví dụ của bạn:
df.curry(out)("hello")("world");
df.curry(out)("hello", "world");
Lưu ý rằng dòng cuối cùng không có "()" ở cuối — nó được gọi tự động.
phần() cho phép để thay thế lập luận một cách ngẫu nhiên:
df.partial(out, df.arg, "world")("hello");
Tôi đề xuất chức năng 'curry' của [Lodash] (http://lodash.com/docs#curry). BTW Tôi khuyên bạn nên toàn bộ thư viện, nó rất hữu ích. –