为什么我收到错误:“Uncaught TypeError:self.myTest不是函数”?如何从javascript类中的另一个方法中调用方法?
class MyClass {
myTest() {
console.log('it works');
}
runMyTest() {
self.myTest();
}
}
var myClass = new MyClass();
myClass.runMyTest();
答案 0 :(得分:11)
您需要使用this
关键字而不是self
。
runMyTest() {
this.myTest();
}
附注
如果要嵌套标准函数表示法,则this
不是词法绑定(将是未定义的)。要解决此问题,请使用箭头函数(首选),.bind
或在函数外部本地定义this
。
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();

答案 1 :(得分:7)
您需要使用this
而不是self
runMyTest() {
this.myTest();
}
然而,很多实现都喜欢保留引用并执行以下操作:
var self = this;
这可能是您将self
视为自我参考的原因。如需进一步阅读,我建议SO - post
答案 2 :(得分:1)
class MyClass {
myTest() {
console.log('it works');
}
let runMyTest = ()=>{
this.myTest();
}
}
var myClass = new MyClass();
myClass.runMyTest();
使用箭头函数将其绑定到函数中。即使在打字稿上也能正常工作
答案 3 :(得分:0)
class MyClass {
myTest() {
console.log('it works');
}
runMyTest() {
this.myTest();
}
}
var myClass = new MyClass();
myClass.runMyTest();

答案 4 :(得分:0)
其他解决方案是将变量上下文$this
的值保存在其他变量中,例如保存在this
使用的是this.anyFunction();
class MyClass {
myTest() {
console.log('it works');
}
runMyTest() {
let this=$this;
this.myTest();
}
}
答案 5 :(得分:0)
<return xmlns:rmas="someURI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="fafa.xsd">
<header>[...]</header>
<body>
<scheme>
<data>
<serial-no>1</serial-no>
<employment>1</employment>
<code>1234</code>
</data>
</scheme>
<scheme>
<data>
<serial-no>1</serial-no>
<employment>1</employment>
<code>1234</code>
</data>
</scheme>
<scheme>
<data>
<serial-no>1</serial-no>
<employment>1</employment>
<code>1234</code>
</data>
</scheme>
</body>
</return>
答案 6 :(得分:0)
class MyClass(){
constructor(){
this.init();
}
init(){
const $this = this;
this.doSomethigElse();
}
doSomethingElse(){
console.log("It worked!");
}
}