2017-04-04 8 views
-1

私はクラス内で値を設定する関数を持っています。私はクラス内とクラス外からこの関数を実行する必要があります。クラスと外部クラスで関数を実行

この関数はstate(val)と呼ばれます。私の知る限り、名前の前にfunctionを追加する必要はありません。

Imは単にここ

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

したがって、2つの別の名前のいずれかを指定する必要があります。たとえば、メソッドsetStateを呼び出すことができます。メソッド名に動詞を使用することは、それらをプロパティと区別するのにも役立ちます。

+0

私は以前これをやっていましたが、 'setState is not defined'というエラーを受け取っていました:S –

関連する問題