使用 _this 引用父 class 方法
Using _this to refer to parent class method
我在从回调函数调用时使用前缀 _this 来引用父 class 函数。但是,当我 运行 节点服务器时,我收到错误消息“_this is not defined”。我实际上是直接从我正在学习的一本 MEAN 堆栈书中提取这段代码,但我似乎无法解决这个问题。
父函数
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;
};
稍后在回调中调用函数
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
稍后回调
_this.getErrorMessage(/*YOUR_PARAMETERS_HERE*/);
或者您可以完全删除 _this
并直接调用该函数,因为父函数在全局范围内。
注意:理解是父函数和回调都在同一个.js
文件中,父函数在全局范围内声明为[=13] =]file 而不是声明为 GLOBAL.getErrorMessage
这使得它在客户端明确地作为 window
对象全局化。
我在从回调函数调用时使用前缀 _this 来引用父 class 函数。但是,当我 运行 节点服务器时,我收到错误消息“_this is not defined”。我实际上是直接从我正在学习的一本 MEAN 堆栈书中提取这段代码,但我似乎无法解决这个问题。
父函数
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;
};
稍后在回调中调用函数
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
稍后回调
_this.getErrorMessage(/*YOUR_PARAMETERS_HERE*/);
或者您可以完全删除 _this
并直接调用该函数,因为父函数在全局范围内。
注意:理解是父函数和回调都在同一个.js
文件中,父函数在全局范围内声明为[=13] =]file 而不是声明为 GLOBAL.getErrorMessage
这使得它在客户端明确地作为 window
对象全局化。