我有以下3个文件:
bar.js
class Bar {
test(p) {
console.log(p);
}
}
module.exports = Bar;
baz.js
const Bar = require('./bar');
class Baz extends Bar {
test2(p) {
this.test(p);
}
}
module.exports = Baz;
foo.js
const Baz = require('./baz');
const { test2 } = new Baz();
test2('test');
当我将'test'
传递给new Baz.test2()
时,我希望它可以将其传递给应该记录this.test(p)
的超类('test'
)。但是,它引发了错误:
this.test(p);
^
TypeError: Cannot read property 'test' of undefined
我在做什么错?为什么this
未定义,我认为它应该引用该类本身?
答案 0 :(得分:2)
test2
与原始上下文(Bar
实例)分开使用,应绑定到正确的this
。
从名字上说不出是设计上的回调。如果是这样,可以将其绑定在构造函数中:
class Bar {
constructor () {
this.test = this.test.bind(this);
}
...
}
否则,它可以就地绑定:
const test2 = new Baz().test2.bind(this);
test2('test');
或者只是不与上下文分开使用:
const baz = new Baz()
baz.test2('test');