更新:.call功能正常,感谢快速回复:) 测试了其他建议的解决方案和
所以我有这个代码,函数setAttribute接受四个输入然后使用它来应用它们。它所用的长代码
this.setAttribute(" data-index-all",1);有效,但当我把它变成一个功能时,它并没有。我很确定问题出在"这个"在一个功能。如果有人能够指出我的错误,我会非常感激。
function setAttribute(a, b, c, d){
this.setAttribute("data-index-all", a);
this.setAttribute("data-index-uleval", b);
this.setAttribute("data-index-vasakul", c);
this.setAttribute("data-index-paremal", d);
}
if (!flipped) {
setAttribute(1, 0, 1, 0);
}else{
setAttribute(0, 1, 0, 1);
}
if (!flipped) {
this.setAttribute("data-index-all", 1);
this.setAttribute("data-index-uleval", 0);
this.setAttribute("data-index-vasakul", 1);
this.setAttribute("data-index-paremal", 0);
} else {
this.setAttribute("data-index-all", 0);
this.setAttribute("data-index-uleval", 1);
this.setAttribute("data-index-vasakul", 0);
this.setAttribute("data-index-paremal", 1);
}
答案 0 :(得分:2)
当你调用没有上下文的函数时,this inside the function将引用全局对象(窗口)。
您可以使用.call()传递自定义上下文
function setAttribute(a, b, c, d) {
this.setAttribute("data-index-all", a);
this.setAttribute("data-index-uleval", b);
this.setAttribute("data-index-vasakul", c);
this.setAttribute("data-index-paremal", d);
}
if (!flipped) {
setAttribute.call(this, 1, 0, 1, 0);
} else {
setAttribute.call(this, 0, 1, 0, 1);
}
但是在使用@codehx的情况下,答案是最好的
答案 1 :(得分:2)
尝试将 this 所引用的元素作为函数参数传递。
function setAttribute(element, a, b, c, d){
element.setAttribute("data-index-all", a);
element.setAttribute("data-index-uleval", b);
element.setAttribute("data-index-vasakul", c);
element.setAttribute("data-index-paremal", d);
}