一个可以在Javascript中组合和链接(点表示法)的函数

cmd*_*mdv 5 javascript functional-programming lodash ramda.js

我正在尝试转换使用大量点符号链接的旧api,这需要保留,即:

[1,2,3,4].newSlice(1,2).add(1) // [3]
Run Code Online (Sandbox Code Playgroud)

我想在这个示例Ramda中添加组合的功能样式,但lodash或其他人会没问题:

const sliceAddOne = R.compose(add(1), newSlice(1,2)) 
sliceAddOne([1,2,3,4])// [3]
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在我的函数中进行链接和组合newSlice这个函数的样子?

我有一个小jsBin的例子.

Tha*_*you 3

编辑

\n\n

我想我一开始误解了你。f你想要一个可以调用的函数

\n\n
f(...args)(someObj) ===  someObj.f(...args)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我会这样做

\n\n
// infix\nArray.prototype.newSlice = function(x,y) { return this.slice(x,y) }\n\n// prefix \nconst newSlice = (x,y) => F => F.newSlice(x,y)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个很好的设计,因为您可以newSlice在任何您希望具有newSlice功能的对象上实现,并且前缀函数将正常工作。这还允许您对每个对象类型(数组、字符串、其他...)有一个唯一的实现newSlice,因为我们正在切片的基础数据很可能会不同 \xe2\x80\x93 您将获得所有这无需this在函数体内进行愚蠢的条件检查。

\n\n

\r\n
\r\n
f(...args)(someObj) ===  someObj.f(...args)\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n