Calling a method from another method in the same class

£可爱£侵袭症+ 提交于 2019-12-08 14:35:46

问题


Why am I getting the error: "Uncaught TypeError: self.myTest is not a function"? How do I call a method from within another method in a javascript class?

class MyClass {

    myTest() {
      console.log('it works');
    }

    runMyTest() {
      self.myTest();
    }

}

var myClass = new MyClass();
myClass.runMyTest();

回答1:


You need to use the this keyword instead of self.

runMyTest() {
    this.myTest();
}

A side note

If you are nesting standard functions notation then this is not lexically bound (will be undefined). To get around this, use Arrow Functions (preferred), .bind, or locally define this outside of the function.

class Test {
  constructor() {
    this.number = 3;
  }

  test() {
    function getFirstThis() {
       return this;
    }

    const getSecondThis = () => {
       return this;
    };

    const getThirdThis = getFirstThis.bind(this);
    
    const $this = this;
    function getFourthThis() {
      return $this;
    }

    // undefined
    console.log(getFirstThis());
    
    // All return "this" context, containing the number property
    console.log(this); 
    console.log(getSecondThis());
    console.log(getThirdThis());
    console.log(getFourthThis());
  }
}

new Test().test();



回答2:


You need to use this not self like

runMyTest() {
  this.myTest();
}

However a lot of implementations like to keep the reference and are doing the following:

var self = this;

That might be the reason you were thinking of self as self reference. For further reading I'd suggest this SO - post




回答3:


class MyClass {

    myTest() {
      console.log('it works');
    }

    runMyTest() {
      this.myTest();
    }

}

var myClass = new MyClass();
myClass.runMyTest();



回答4:


Other solution is save the value of variable context $this inside other for example in this

and for use is this.anyFunction();

class MyClass {
    myTest() {
      console.log('it works');
    }

    runMyTest() {
      let this=$this;
      this.myTest();
    }
}


来源:https://stackoverflow.com/questions/43642729/calling-a-method-from-another-method-in-the-same-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!