在节点module.exports的对象方法中使用“this”
这是我的模块:
module.exports = { name: '', email: '', id: '', provider: '', logged_in: false, isLoggedIn: function(req, res, next){ console.log(this); } };
我像这样导入它:
var user = require('user');
当我使用isLoggedIn
函数作为Express的中间时,控制台会logging全局的Node对象。 我如何得到它的function是在内的对象?
编辑
所以我有我的用户对象如上定义。 根据各种因素,这个对象在程序的其他地方被填充。 我用创build一个中间件函数来快速的testing用户是否login。显然把这个函数放在用户对象的地方,但是我需要访问logged_in属性来正确评估它。 因此使用this.logged_in。
当你把它作为中间函数传递时,我相信你正在做这样的事情
func(.., user.isLoggedIn, ..)
当你这样做时,你实际上是从user
对象中分离出isLoggedIn
。 所以,默认情况下,如果不是在严格模式下, this
将引用全局对象。 要解决这个问题,你应该像这样bind
函数
func(.., user.isLoggedIn.bind(user), ..)
你应该把这与IIFE:
module.exports = (function() { return { name: '', email: '', id: '', provider: '', logged_in: false, isLoggedIn: function(req, res, next){ console.log(this); } } })();
你可以在这里阅读: http : //designpepper.com/blog/drips/an-introduction-to-iifes-immediately-invoked-function-expressions