Igg*_*ggY 11 javascript node.js express
groups.js
class groupsCtrl {
constructor() {
this.info = "test";
}
get(res, req) {
console.log("LOG ! ", JSON.stringify(this));
}
}
module.exports = new groupsCtrl(); //singleton
Run Code Online (Sandbox Code Playgroud)
routes.js
var express = require('express');
var router = express.Router();
var groupsCtrl = require('controllers/api_admin/groups.js');
router.get('/groups/', groupsCtrl.get);
Run Code Online (Sandbox Code Playgroud)
这个日志 LOG ! undefined
如何this在我的控制器类中访问?
rob*_*lep 21
您需要将方法绑定到实例.
一个解决方案
router.get('/groups/', groupsCtrl.get.bind(groupsCtrl));
Run Code Online (Sandbox Code Playgroud)
另一种方案:
constructor() {
this.info = "test";
this.get = this.get.bind(this);
}
Run Code Online (Sandbox Code Playgroud)
或者使用类似的东西es6bindall(基本上和上面的代码一样,但是当你需要绑定多个方法时可能会更有用).
小智 6
class groupsCtrl {
constructor() {
this.info = 'test';
}
get = (res, req) => {
console.log('LOG ! ', JSON.stringify(this));
};
}
Run Code Online (Sandbox Code Playgroud)
您可以只使用箭头函数来避免样板代码