这不是我的实际代码(希望很明显),但它是一个非常简短的例子来证明这个问题。
我正在用一个接受回调作为参数的方法编写一个类。当方法完成时,它应该调用回调。
class Demo {
constructor() {
this.method1();
}
method1() {
console.log("Method1");
this.method2(this.method1);
}
method2(onDone) {
console.log("Method2");
onDone();
}
}
new Demo();
所以我想让它在调用method1
和method2
之间来回跳转。如果它正常工作,我应该最终得到堆栈溢出,但是发生了什么呢:
Method1
Method2
Method1
Uncaught TypeError: Cannot read property 'method2' of undefined
at method1 (demo.js:8)
at Demo.method2 (demo.js:13)
at Demo.method1 (demo.js:8)
at new Demo (demo.js:3)
不知何故,当我们第二次进入method1
时,忘记了this
是Demo
的一个实例。我尝试用onDone()
替换method2
中的this.onDone()
但是它完全找不到onDone
(这是有道理的 - onDone
是参数的名称,而不是Demo
成员的姓名。)
这样做的正确方法是什么?