javascript - 如何使用三元运算符选择函数

标签 javascript jquery ternary-operator function-call

以下代码段有效

if (condition)
  node.addClass('myclass');
else
  node.removeClass('myclass');

但不是这个

node[condition ? 'addClass' : 'removeClass']('myclass');

也不是这个

(condition ? node.addClass : node.removeClass)('myclass');

如果我测试它

console.log(node[condition ? 'addClass' : 'removeClass']);

浏览器打印它是一个函数。为什么我不能调用它?

最佳答案

它显然按照我在这里给出示例的方式工作。它不适用于一个额外的间接级别。

function print(x) {
  console.log(x);
  return x;
}

print(condition ? node.addClass : node.removeClass)('myclass');

使用这段代码,Chrome 告诉我:

Uncaught TypeError: Cannot read property '0' of undefined

但我发现我可以通过使用 callnode 作为 this 传递给函数来规避这个问题。

print(condition ? node.addClass : node.removeClass).call(node,'myclass');

显然,正如@epascarello 指出的那样,在这种特定情况下,正确的解决方案是使用 toggleClass。我有点惊讶 this 在这种情况下丢失了。

关于javascript - 如何使用三元运算符选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056617/

相关文章:

javascript - GraphQL 突变仅返回一个结果

javascript - 如何创建 ViewModel 事件模式

javascript - 如何使用 Ctrl+Z 事件将文本替换为星号?

c# - 需要使用 C# 三元条件运算符进行转换

具有范围解析和条件的 C++ 三元运算符

javascript - 需要自动保存 TinyMCE

javascript - 为什么我的 jQuery 函数没有传递参数并更改它?

javascript - 如何在检查复选框按钮验证后显示消息?

javascript - 如何将事件处理程序绑定(bind)到 jQuery 中的实例?

java - 将 "condition ? expr1 : expr2"的链转换为 "if"的链