在node.js中不断出现“ x不是函数”错误

时间:2020-02-02 10:44:03

标签: javascript node.js ecmascript-6 bind es6-class

我正在尝试在另一个方法内调用一个方法,但出现错误“ x不是函数”。 这些方法在同一类中。 我是node的新手,所以我完全不会收到它的错误。我的代码是:

文件app.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

注意:我尝试在调用x方法之前使用“ this”(例如:this.x(str);),但是“ this”未定义

2 个答案:

答案 0 :(得分:3)

更简洁的绑定方法是在构造函数中完成。

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了。

您可以详细了解JavaScript here (StackOverflow)here (MDN)bind()的用法。

答案 1 :(得分:1)

在尝试调用当前对象的方法而不是全局方法时
您应该使用this进行调用,这样才能从当前对象中调用它
您还需要将方法绑定到构造函数中创建的对象,或者手动将其绑定,也可以使用auto-bind

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

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

  x(arg) {
    ...
  }
}