龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

面向对象的JavaScript基本知识指南大全(1)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
由于 jQuery 和 MooTools 等精心开发的库, JavaScript 已成为前端开发的基础。不过,我们要留意这些优秀库中所运用的较高级概念,这点极其重要。原因何在?因为作为Web开发人员,对待学习

由于jQueryMooTools等精心开发的库,JavaScript已成为前端开发的基础。不过,我们要留意这些优秀库中所运用的较高级概念,这点极其重要。原因何在?因为作为Web开发人员,对待学习最新的编程趋势和试图把那些趋势推向极致,我们必须予以一视同仁。要不然,Web开发领域就不会出现创新。所以,我们不妨花点时间来了解JavaScript面向对象编程的基本知识,包括类、继承和范围。

在我们学习如何把类实施到代码中之前,不妨讨论一下类是什么、为什么有必要学习/使用类。

正如Java文档声明的那样:“类是用来创建一个个对象的蓝图。”这蓝图就像造房子过程中所用的实际蓝图。建造人员使用蓝图来评估房子有什么样的属性,房子会有什么样的功能。类是表示对象属性的一种很方便的方式,无论这对象是房子、汽车还是人。当存在的某个对象不止一个时,类就变得特别有用。

比如说,我们不使用类来比较一下两个实际的对象。这体现了程序思考过程,而不是面向对象的思考过程。我们将描述一个名叫Rob的男子和一个名为Emillee的小女孩。我们必须假定我们对人体一无所知,因为我们没有蓝图(类)可供使用。

Rob:

1. Rob在身体的上部有两个椭圆形的结构,相隔几英寸。这些椭圆形结构有一个黑色背景,中间是棕色。

2. Rob有两个与地面相对平行的结构,似乎表明了人体中最垂直的部分,这仍是身体基部的一部分。

3. Rob有两个附属物,从另外两个附属物延伸过来。这些似乎可用来抓取物件。它们似乎比较大。

4. Rob高度约6英尺。

5. Rob无意识地吸入氧,把氧转换成二氧化碳。

Emilee:

1. Emillee在身体的上部有两个椭圆形的结构,相隔几英寸。这些椭圆形结构有一个黑色背景,中间是蓝色。

2. Emillee有两个与地面相对平行的结构,似乎表明了人体中最垂直的部分,这仍是身体基部的一部分。

3. Emillee有两个附属物,从另外两个附属物延伸过来。这些似乎可用来抓取物件。它们似乎比较小。

4. Emillee高度约1.5英尺。

5. Emillee无意识地吸入氧,把氧转换成二氧化碳。

单单描述一个人的1)眼睛、2)肩膀、3)双手、4)身高和5)呼吸行为就有大量的工作要做。要注意:我们不得不两次给出几乎一模一样的看法,因为我们没有蓝图可供使用。虽然描述两个人不是太费劲,但是如果我们想要描述100个人、1000个人或者100万个人,怎么办?肯定有一种更高效的方法来描述有着类似属性的对象:这正是类的亮点。

我们不妨使用面向对象的理念,重新考虑前一个例子。由于我们描述的是男子和小女孩,我们知道他们都是人类。所以不妨先为人类创建一个简单的蓝图。

人类:

1. 身体的上部有两个椭圆形的结构。这些椭圆形结构有一个黑色背景,中间颜色不一样。我们称之为眼睛。

2. 有两个与地面相对平行的结构,似乎表明了人体中最垂直的部分,这仍是身体基部的一部分。我们称之为肩膀。

3. 有两个附属物,从另外两个附属物延伸过来。这些似乎可用来抓取物件。它们的大小不一样。我们称之为双手。

4. 视年龄及其他因素而定,高度不一样。我们称之为身高。

5. 无意识地吸入氧,并把氧转换成二氧化碳。我们称之为呼吸。

于是我们已声明,人类的属性是,他们有眼睛,有肩膀,有双手,有身高。我们还已声明,这些属性可能不一样。定义了人类的蓝图后,并且声明了Rob和Emillee是人类后,我们可以将已经知道的关于人类的属性运用到Rob和Emillee。

Rob是人类。

1. Rob有棕色的眼睛

2. Rob有肩膀

3. Rob有大大的双手

4. Rob身高6英寸

5. Rob会呼吸

Emillee是人类。

1. Emillee有蓝色的眼睛

2. Emillee有肩膀

3. Emillee有小小的双手

4. Emillee身高1.5英尺

5. Emillee会呼吸

我们只要明确声明Rob和Emillee是人类,就可以把与人类有关的属性和功能直接运用到Rob和Emillee。这让我们可以避免重新定义身体的所有部位,同时让我们可以高效地描述这两个对象之间的重要区别。

下面是关于类及对象(名为类的实例)的几个例子,以便你明白两者之间的关系。

类Student(学生)

◆ 属性:年级、年龄、出生日期和学生身份标志(SSID)

◆ 功能:计算年级平均成绩、查看缺课情况、更新操行评语

类Employee(员工)

◆ 属性:雇主身份识别号(EIN)、小时工资、联系号码、保险

◆ 功能:设定薪水、查看工作效率和获取简历

类Computer(电脑)

◆ 属性:处理器、主机、显示器

◆ 功能:开机、关机和重启

好了,我们已明白了类背后的概念,不妨把所知道的东西运用到JavaScript。与包括PHP和C++在内的语言不一样,JavaScript没有类数据类型。不过,如果我们借助JavaScript的灵活性,就很容易使用函数来模拟类。

我们以前面一个例子为例,使用类来表示学生。

创建一个类时,你必须做两件事:必须知道这个类有什么属性/函数(又叫方法);你需要用一个值来初始化属性。

  1. function Student(name, gender, age, grade, teacher) 
  2.     { 
  3.         this.name = name; 
  4.         this.gender = gender; 
  5.         this.age = age; 
  6.         this.grade = grade; 
  7.         this.teacher = teacher; 
  8.     } 
  9.     var bob = new Student("bob""male", 15, 10, "Marlow"); 
  10.     alert(bob.age); //输出15 
  11.     var susan = new Student("susan""female", 10, 5, "Gresham"); 
  12.     alert(susan.gender); //输出 'female' 

我们可以从这个例子中看出,类的实例使用新的运算符来进行初始化。类的属性和方法使用. (dot)运算符来访问。所以为了获得名为bob的Student类实例的属性年龄,我们只要使用bob.age。同样,我们创建了Student类的一个实例,把它分配给susan。为了获得susan的性别,我们只要使用susan.gender。类在代码可读性方面带来了巨大的好处:你不需要有任何编程经验,就能推断出bob.age是bob的年龄。

不过,前一个例子有两个不好(但很容易修复)的缺点。

1)任何语句都可以访问类属性

2)参数必须以一定的次序来传递

1 2 3
精彩图集

赞助商链接