我试图了解如何使用Lodash的“流程”,特别是我想了解如何利用它将原始调用者的“ this”传递给链中每个函数的事实。我碰到了这个帖子– –在第二个答案中,它解决了这个问题(“在需要的情况下,所有应用函数都将使用调用者的this参数”),但我不太了解那意味着什么。我试图自己编写一个简短的代码示例,但是它不起作用,可能是因为我错过了练习的重点。任何指针都很感激。
const fp = require('lodash/fp')
const a = x => {
console.log(`in a this is ${JSON.stringify(this)}`)
return x * 2
}
const b = x => {
console.log(`in b this is ${JSON.stringify(this)}`)
return x / 3
}
const c = x => {
console.log(`in c this is ${JSON.stringify(this)}`)
return x + 5
}
const obj1 = {
a,
title: "hi there, the title"
}
const all = fp.pipe([obj1.a, b, c])
console.log(all(10))
答案 0 :(得分:2)
您可以_.bind()
this
的功能通过管道/流到对象而创建。调用时,将使用绑定的this
值调用管道中的所有函数:
const { pipe, bind } = _
function a(x) {
console.log(`in a this is ${JSON.stringify(this)}`)
return x * 2
}
function b(x) {
console.log(`in b this is ${JSON.stringify(this)}`)
return x / 3
}
function c(x) {
console.log(`in c this is ${JSON.stringify(this)}`)
return x + 5
}
const obj1 = {
title: "hi there, the title"
}
const all = bind(pipe([a, b, c]), obj1)
console.log(all(10))
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
旧答案:您需要将功能手动绑定到obj1
。为此,您不能使用数组函数,因为它们会自动使用它们在其中定义的上下文的this
。
const { pipe, bind } = _
function a(x) {
console.log(`in a this is ${JSON.stringify(this)}`)
return x * 2
}
function b(x) {
console.log(`in b this is ${JSON.stringify(this)}`)
return x / 3
}
function c(x) {
console.log(`in c this is ${JSON.stringify(this)}`)
return x + 5
}
const obj1 = {
title: "hi there, the title"
}
const all = pipe([a, b, c].map(fn => bind(fn, obj1)))
console.log(all(10))
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>