以下代码段有效
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
但我发现我可以通过使用 call
将 node
作为 this
传递给函数来规避这个问题。
print(condition ? node.addClass : node.removeClass).call(node,'myclass');
显然,正如@epascarello 指出的那样,在这种特定情况下,正确的解决方案是使用 toggleClass
。我有点惊讶 this
在这种情况下丢失了。
关于javascript - 如何使用三元运算符选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056617/