在扩展类中未定义

时间:2018-12-06 13:10:09

标签: node.js ecmascript-6

我有以下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未定义,我认为它应该引用该类本身?

1 个答案:

答案 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');