2015-03-31 42 views
0

UPDATE:.CALL功能工作,感謝您的快速答覆:) 測試的其他解決方案建議也和JavaScript本在功能

所以我有這樣的代碼,功能的setAttribute它有四個輸入,然後應用他們使用這個。它的長碼

this.setAttribute(「data-index-all」,1);工程,但是當我把它變成一個功能它不。我很確定問題出在一個函數中的「this」。如果有人能指出什麼是錯的,我會非常感謝。

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); 
       } 
+1

javascript已經有setAttribute,所以定義另一個函數名稱... – 2015-03-31 08:19:37

回答

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答案將是最好的

2

儘量傳遞到這個所指的元素函數參數。

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); 
}