《node与express开发》第9章关于构造函数的一段代码不解
这是一个表单提交的处理
//这里的构造函数不太懂
function NewsletterSignup(){
}
//这里也是 不知道他们使干什么用的 为什么要用
NewsletterSignup.prototype.save = function(cb){
cb();
};
var VALID_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;
//邮箱验证`
app.post('/newsletter', function(req, res){
var name = req.body.name || '', email = req.body.email || '';
// 输入验证
if(!email.match(VALID_EMAIL_REGEX)) {
if(req.xhr) return res.json({ error: '有错误' });
req.session.flash = {
一些返回错误的信息
};
return res.redirect(303, '/newsletter/archive');
}
// new NewsletterSignup({ name: name, email: email }) 为什么要传这个对象进去?
// .save(回调函数)这个回调函数就是上面构造函数里的cb吗?
new NewsletterSignup({ name: name, email: email }).save(function(err){
if(err) {
if(req.xhr) return res.json({ error: 'Database error.' });
req.session.flash = {
返回数据库错了的信息
}
return res.redirect(303, '/newsletter/archive');
}
if(req.xhr) return res.json({ success: true });
req.session.flash = {
返回提交的是正确的信息
};
return res.redirect(303, '/newsletter/archive');
});
});
6 回复
这实际上是javascript中的东西,javascript中类的实现有基于prototype(原型)方式,你可以看下js中类的实现方式
@Aoqin new NewsletterSignup({ name: name, email: email }).save(这里是回调); 回调函数不是会自己直接就执行吗? 那么NewsletterSignup.prototype.save = function(cb){ cb(); }; 这个cd() 又有什么用呢?
cd()//是执行函数,save=function(cb){}//这是一个声明函数,cb传的是function(){} 所以save()执行时才会执行cb();
@Aoqin 了解了~ (づ ̄ 3 ̄)づ
同学,基础堪忧…推荐《Javascript高级程序设计》
上面的回答都很到位,我就不献丑了