это не определено в расширенном классе - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть 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 голосов
/ 06 декабря 2018

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...