使用_this来引用父类的方法

我使用前缀_this从一个callback函数调用它时引用一个父类函数。 但是,当我运行节点服务器时,出现错误消息'_this is not defined'。 实际上,我直接从我正在学习的平均值堆书中抽取这些代码,但似乎无法解决这个问题。

父函数

var getErrorMessage = function(err){ var message = ''; if(err.code){ switch(err.code){ case 11000: case 11001: message = 'Username already exists'; break; default: message = 'Something went Wrong'; } } else{ for(var errName in err.errors){ if(err.errors[errName].message){ message = err.errors[errName].message; } } } return message; }; 

稍后在callback中调用函数

 exports.saveOAuthUserProfile = function(req, profile, done){ User.findOne({provider: profile.provider, providerId: profile.providerId}, function(err,user){ if(err){ return done(err); } else{ if(!user){ var possibleUsername = profile.username || ((profile.email) ? profile.email.split('@')[0] : ''); User.findUniqueUsername(possibleUsername, null, function(availableUsername){ profile.username = availableUsername; user = new User(profile); user.save(function(err){ if(err){ var message = _this.getErrorMessage(err); req.flash('error',message); return res.redirect('/signup'); } else{ return done(err,user); } }); }); } else{ return done(err, user); } } }); }; 

继续评论

在全局范围内的父函数之后声明如下。

 var _this = {}; _this.getErrorMessage = getErrorMessage; // Passing the function reference 

后来在callback

 _this.getErrorMessage(/*YOUR_PARAMETERS_HERE*/); 

或者,您可以完全删除_this并直接调用函数,因为父函数在全局范围内。

注意:理解是父函数和callback都在相同的.js文件中,父函数在全局范围内声明了相对于那个.js文件,而不是声明为GLOBAL.getErrorMessage ,它使得它在客户端作为window对象显式地全局化。