gpt4 book ai didi

javascript - 如何使用 Lodash/FP 中的 'flow' 来传递 'this'

转载 作者:行者123 更新时间:2023-12-01 00:26:45 41 4
gpt4 key购买 nike

我试图了解如何使用 Lodash 的“流程”,特别是我想了解如何使用它将原始调用者的“this”传递给链中的每个函数这一事实。我看到这篇文章--What does the lodash flow function do? - 在第二个答案中它解决了这个问题(“如果需要,所有应用的函数都将使用调用者的 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))

最佳答案

您可以_.bind()通过管道/流创建的函数的this到一个对象。调用时,管道中的所有函数都将使用绑定(bind)的 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>

旧答案:您需要手动将函数绑定(bind)到 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>

关于javascript - 如何使用 Lodash/FP 中的 'flow' 来传递 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917320/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com