第一章 面向对象前言

326 阅读2分钟

背景:一个验证表单功能的任务,仅需要验证用户名、邮箱、密码等。

一,初始化函数

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();