背景:一个验证表单功能的任务,仅需要验证用户名、邮箱、密码等。
一,初始化函数
function checkName() {
// 验证姓名
}
function checkEmail() {
// 验证邮箱
}
function checkPassword() {
// 验证密码
}
- 问题点:创建了很多全局变量,且是很常用的全局变量
函数的另一种形式:
var checkName = function() {
// 验证姓名
}
var checkEmail = function() {
// 验证邮箱
}
var checkPassword = function() {
// 验证密码
}
相当于提前声明了三个全局变量,如果别人也定义了同样的方法就会覆盖掉原有的功能了。
假如定义了很多方法,这种相互覆盖的问题很不容易察觉。
二,用对象收编变量
1. 创建一个检测对象,把我们的方法放在里面
var CheckObject = {
checkName: function() {},
checkEmail: function() {},
checkPassword: function() {}
}
使用也很简单,比如检测姓名 CheckObject.checkName()
2. 对象的另一种形式
在 JavaScript 中函数也是对象,所以你可以这么做:
var CheckObject = function() {};
CheckObject.checkName = function() {};
CheckObject.checkEmail = function() {};
CheckObject.checkPassword = function() {};
三,一个检测类
var CheckObject = function() {};
CheckObject.prototype = {
checkName: function() {
// 验证姓名
},
checkEmail: function() {
// 验证邮箱
},
checkPassword: function() {
// 验证密码
}
}
这样创建对象实例的时候,创建出来的对象所拥有的方法就都是一个了,因为它们都要依赖 prototype 原型依次寻找,而找到的方法都是同一个,它们都绑定在 CheckObject 对象类的原型上。
使用如下:
var a = new CheckObject();
a.checkName();
a.checkEmail();
a.checkPassword();
调用了三个方法,但是对象 a 书写了 3 遍。这是可以避免的,那就要在你声明的每一个方法末尾处讲当前对象返回。
在 JavaScript 中 this 指向的就是当前对象,所以你可以将它返回。
var CheckObject = function() {};
CheckObject.prototype = {
checkName: function() {
// 验证姓名
return this;
},
checkEmail: function() {
// 验证邮箱
return this;
},
checkPassword: function() {
// 验证密码
return this;
}
}
我们就可以这样使用它:
var a = new CheckObject();
a.checkName().checkEmail().checkPassword();