NodeJ中的ES6类上下文?还是在NodeJs的类中使用“ this”?

时间:2018-08-13 09:27:21

标签: javascript node.js ecmascript-6 async-await static-methods

我是Node js的新手,实际上我无法理解如何在类中调用方法,除非是静态的,或者每次我遍历函数时都要创建一个新对象。

这有点疯狂。例如:

class UserController 
{
    methodOne (req, res) {
        this.methodTwo (req);
    }

    methodTwo (data) {
        return data;
    }
}

这就是我想调用我的函数的方式,但是每次执行此操作时,我都会得到this的错误未定义。

我知道fat arrow functions不会遵循javascript中相同的上下文。但是我只是想确定自己是否做对了。

这就是我实现上述代码的方式。

class UserController 
{
    static methodOne (req, res) {
        UserController.methodTwo (req);
    }

    static methodTwo (data) {
        // Manipulates request before calling
        return UserController.methodThree (data);
    }

    static methodThree (data) {
        return data;
    }
}

即用类名UserController静态调用每个方法。

因此,如果有更好的方法,我需要您提出建议。 预先感谢。

PS:上面的代码只是一个例子。

1 个答案:

答案 0 :(得分:2)

问题的原因是您丢失了函数上下文

class UserController {
  async methodOne() {
    return this.methodTwo()
  }

  async methodTwo() {
    return Promise.resolve("methodtwo")
  }
}

const obj = new UserController();
const methodOne = obj.methodOne;

methodOne(); // ----> This will throw the Error

methodOne.call(obj); // ----> This Works

// Or you can call the method directly from the obj
obj.methodOne(); // Works!!

// If you want to cache the method in a variable and preserve its context use `bind()`
const methodOneBound = obj.methodOne.bind(obj);
methodOneBound(); // ----> This works