如何将classList的add/remove方法作为参数传入JS函数?
解决方法
你遇到的报错根源很明确:直接写add或remove时,JS会在全局作用域查找这个变量,但add/remove是domElement.classList(属于DOMTokenList对象)的方法,并非全局变量,所以才会触发“remove is not defined”的错误。
以下是两种不用修改函数参数(保留仅传一个参数)的实现方案:
方案1:传方法名字符串,用方括号访问
修改函数,通过字符串形式的方法名,利用方括号语法调用classList上的对应方法:
function handleMessageDot(funName) { domElement.classList[funName]('hidden'); }
调用时直接传入方法名的字符串即可:
handleMessageDot('add'); handleMessageDot('remove');
方案2:传classList方法的引用,用call绑定上下文
直接把domElement.classList上的add/remove方法引用传入函数,再通过call指定方法的执行上下文为domElement.classList:
function handleMessageDot(fun) { fun.call(domElement.classList, 'hidden'); }
调用时传入对应方法的引用:
handleMessageDot(domElement.classList.add); handleMessageDot(domElement.classList.remove);
这两种方式都无需给函数新增domElement参数,完全符合你的需求。
内容的提问来源于stack exchange,提问作者mgar
相关产品推荐
相关产品推荐

