需求: 原生js实现一个登陆验证的提示,当用户输入用户名或者密码不正确时,给出提示
var LoginAlert = function (text) { this.content = text } LoginAlert.prototype.show = function () { alert(this.content) } var userNameAlert = new LoginAlert('用户名不能多于16个字母和数字') userNameAlert.show() var pasWordAlert = new LoginAlert('输入密码不正确') pasWordAlert.show()
新需求: 再加一个注册按钮,同样进行输入框的验证
var RegisterAlert = function (text) { this.content = text } RegisterAlert.prototype.show = function () { alert(this.content) } var RegisterFailedAlert = new RegisterAlert('用户名已存在,请重新输入') RegisterFailedAlert.show()
新需求: 再添加一个登录成功的提示框
var LoginPrompt = function (text) { this.content = text } LoginPrompt.prototype.show = function () { alert(this.content) } var loginSuccess = new LoginPrompt('登录成功,填写今天的心情吧~~~') loginSuccess.show()
点评: 这么写已经能够满足于需求,只是比较零散,如果将上述类封装在一个类,复用重复性代码,然后调用一个类,从而实现需求的功能,岂不是好?
var Factory = function (name) { switch (name) { case 'alert': return new LoginAlert(); case 'register': return new RegisterAlert() case 'LoginPrompt': return new LoginPrompt() } }
点评:上述代码虽然将多个类封装在一个函数里面,但是存在大量的重复性代码,可以继续优化下
var LoginValid = function (tips) { this.content = tips } LoginValid.prototype.show = function () { alert(this.content) } var FactoryFun = function (type, tips) { var obj = new Object(); obj.content = tips; obj.show = function () { alert(this.content) } if (type === 'alert') { } if (type === 'register') { } if (type === 'LoginPrompt') { } return obj } var loginInstance = FactoryFun('alert', '用户名输入错误') loginInstance.show()
点评: 上述代码相对首次书写定义多个类进行验证是不是优雅很多呢? 提供一个工厂函数,根据传入参数判断类型、提示语。 在团队项目开发,我们应该尽可能少的创建全局变量。同一类对象的不同需求,重复性代码可以提取出来,代码复用是面向对象编程的一条准则;