gpt4 book ai didi

javascript - 使用逻辑或运算符 (a || b) 运行 JS 中的两个函数之一

转载 作者:行者123 更新时间:2023-12-01 03:05:09 24 4
gpt4 key购买 nike

为什么我只能使用三元运算符调用两个函数之一?

我想做的事:

newToken(account, request, response, returning = false) {
/* Irrelevant code ommitted */
return Promise.resolve((returning || response.json)({message: 'ok', account}))
}

上面使用逻辑OR运算符来选择返回函数(如果可用),否则只需设置一个json响应

但是,当我以这种方式设置代码时,出现错误:无法读取未定义的“app”

如果我使用三元,代码可以正常工作:

newToken(account, request, response, returning = false) {
/* Irrelevant code ommitted */
return Promise.resolve(returning ? returning({message: 'ok', account}) : response.json({message: 'ok', account}))
}

如果我只是运行 console.log((returning || response.json)) 总是会记录正确的函数,那么为什么我在这样设置时无法运行这些函数呢?

最佳答案

response.json(...)
函数内的

this等于response的值。

当您使用OR版本时,它相当于:

tempfn = returning || response.json;
tempfn({message: 'ok', account});

调用 tempfn 不会将 this 变量绑定(bind)到任何东西,因此它默认为全局对象。

response.json 函数可能需要访问 response 对象,因此当您未正确绑定(bind)它时,它会失败。

你可以通过显式调用.bind()来获得你想要的:

newToken(account, request, response, returning = false) {
/* Irrelevant code ommitted */
return Promise.resolve((returning || response.json.bind(response))({message: 'ok', account}))
}

关于javascript - 使用逻辑或运算符 (a || b) 运行 JS 中的两个函数之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248136/

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