Постоянное получение ошибки "x is not function" в node.js - PullRequest
1 голос
/ 02 февраля 2020

Я пытаюсь вызвать метод внутри другого метода, но я получаю сообщение об ошибке "x не является функцией". Методы в одном классе. Я новичок в узле, поэтому я не получаю его ошибок вообще. Мой код:

файл приложения. js:

const express = require("express");
const app = express();
const pkg = require("./app/b.js");

const port = 3001;

pkg("Hi");

app.listen(port, () => console.log("app is running on port " + port));

, а мой файл b. js выглядит так:

class BFile{
  y(str){
    // some irrelative codes
    x(str)
  }

  x(arg){
    // some code
  }
}

const obj = new BFile()
module.exports = obj.y

примечание: я пытался использовать «this» перед вызовом метода x (например: this.x (str);), но «this» не определено

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

Более чистый способ связывания - это сделать это в конструкторе.

class BFile {
  constructor() {
    this.y = this.y.bind(this);
    this.x = this.x.bind(this);
  }

  y(str) {
    this.x(str); // this is needed here.
  }

  x(arg) {
    // some code
  }
}

const obj = new BFile();
module.exports = obj.y;

Тогда вы сможете использовать this очень хорошо.

Вы можете узнать больше об использовании bind() в JavaScript здесь (StackOverflow) или здесь (MDN) .

0 голосов
/ 02 февраля 2020

Поскольку вы пытаетесь вызвать метод текущего объекта, а не глобальный метод
Вы должны вызывать его, используя this, поэтому он будет вызываться из текущего объекта
Вам также нужно будет связать Метод создания объекта в конструкторе. Либо вручную, либо вы можете использовать auto-bind

class BFile{
  constructor () {
    this.x = this.x.bind(this);
    // Or autobind(this);
  }

  y(str) {
    ...
    this.x(str);
    ...
  }

  x(arg) {
    ...
  }
}
...