2017-04-04 65 views
-1

我有這臺我的類中的一個值,並做一些其他的東西的功能。我需要從課內和課外運行這個功能。帶班和課外運行功能

函數被調用state(val)。據我所知,你不需要在名字前添加function

林只是得到一個錯誤說

state is not defined

這裏是我的代碼

// Menu control object 
    class menuControl { 
     constructor(obj, children, items) { 
     this.children = children; 
     this.elm = obj; 
     this.state = 0; 
     } 

     state(val) { 
     this.state = val; 
     for(var index in controls) { 
      if (index !== not) { 
      addClass(controls[index].elm, 'disabled'); 
      } else { 
      removeClass(controls[not].elm, 'disabled'); 
      } 
      if (this.state === 0) { 
      removeClass(controls[index].elm, 'disabled'); 
      } 
     } 
     } 

     toggle() { 
     // MENU ACTIVE 
     if (this.state === 0) { 
      for(var i in this.children) { 

      // Add required classes 
      if (this.children[i][1] === 1) { 
       addClass(this.children[i][0], 'toggled'); 
      } else { 
       removeClass(this.children[i][0], 'toggled'); 
      } 
      } 
      this.state(1); // Toggle the state 
     } else { 

      // MENU INACTIVE 
      for(var i in this.children) { 
      removeClass(this.children[i][0], 'toggled'); 
      } 

      this.state(0); // Toggle the state 
     } 
     } 
    } 

更新

// Menu control object 
    class menuControl { 
     constructor(obj, children, items) { 
     this.children = children; 
     this.elm = obj; 
     this.state = 0; 
     } 

     setState(val) { 
     this.state = val; 
     for(var index in controls) { 
      if (index !== not) { 
      addClass(controls[index].elm, 'disabled'); 
      } else { 
      removeClass(controls[not].elm, 'disabled'); 
      } 
      if (this.state === 0) { 
      removeClass(controls[index].elm, 'disabled'); 
      } 
     } 
     } 

     toggle() { 
     // MENU ACTIVE 
     if (this.state === 0) { 
      for(var i in this.children) { 

      // Add required classes 
      if (this.children[i][1] === 1) { 
       addClass(this.children[i][0], 'toggled'); 
      } else { 
       removeClass(this.children[i][0], 'toggled'); 
      } 
      } 
      setState(1); // Toggle the state <--------- Get the error here 
     } else { 

      // MENU INACTIVE 
      for(var i in this.children) { 
      removeClass(this.children[i][0], 'toggled'); 
      } 

      setState(0); // Toggle the state 
     } 
     } 
    } 
+1

你有一個名爲'state'的方法和一個屬性。在構造函數中,用屬性覆蓋(繼承)方法。 – Thomas

+0

我已經命名方法setState之前,但得到了錯誤:'setState未定義'@Thomas –

+0

你可以顯示代碼,並在哪裏得到該錯誤? – Thomas

回答

2

你定義兩次狀態:

constructor(obj, children, items) { 
    this.children = children; 
    this.elm = obj; 
    this.state = 0; // <--- once as a numeric property 
    } 

    state(val) { // <--- ... and once as a method 
    this.state = val; 
    for(var index in controls) { 
     if (index !== not) { 
     addClass(controls[index].elm, 'disabled'); 
     } else { 
     removeClass(controls[not].elm, 'disabled'); 
     } 
     if (this.state === 0) { 
     removeClass(controls[index].elm, 'disabled'); 
     } 
    } 
    } 

所以,你會需要給兩個別稱之一。例如,你可以調用你的方法setState。爲方法名稱使用動詞也有助於將它們與屬性區分開來。

+0

我之前這樣做,但得到錯誤'setState未定義':S –