背景:一个验证表单功能的任务,仅需要验证用户名、邮箱、密码等。
一,初始化函数
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();
