JavaScript面向对象程序设计(5) 类

类是面向对象程序设计的核心概念之一。一个类代表了具有相似属性的一类事物的抽象。从本篇开始 ,我们将正式的进入JavaScript的面向对象部分。首先需要注意的是,在JavaScript中并没有“类 ”这一关键字——在大多数语言中都是使用class作为关键字的。所以,这里的类就成 了一个概念,它没有明确的语法标志。

1.类和构造函数

前面说过,在JavaScript中并没有明确的类的概念。实际上,我们给出的只是类的构造函数。类的构 造函数构成了这个类的全部内容。既然叫做构造函数,它也是一个普通的函数,没有什么不同之处。因 此,我们能够很轻易的定义出一个构造函数:

function Person(name, age) {
 this.name = name;
 this.age = age;
 this.show = function() {
  alert("Hello, my name is " + this.name + ", my age is " + this.age);
 };
}

这里,我们定义了一个类 Person,它有两个属性:name和age;有一个方法:show。看上去和其他语 言的类的定义没有什么不同。其实,这里最大的不同就是在于这个关键字function。我们使用了定义函 数的方式定义了一个类。

2.new

定义出来类之后,需要创建类的对象。同其他语言一眼,JavaScript也使用new操作符创建对象。具 体代码如下:

var bill = new Person("Bill", 30);
alert(bill.name);
alert(bill["age"]);
bill.show();

这里使用new创建一个Person类的对象。和其他语言类似,new之后是该类的构造函数。当创建对象之 后,就可以像前面的章节中说到的一样,使用.或者[]对属性进行访问。

注意一下,这里的构造函数就是一个普通的函数,那么,是不是所有的函数都可以使用new操作符呢 ?答案是肯定的。那么,这个new操作符到底做了什么呢?

当使用new操作符的时候,首先JavaScript会创建一个空的对象,然后将会对这个对象进行初始化。 用什么来初始化呢?当然就是你调用的那个构造函数了。最后,这个创建的对象将返回给调用者,于是 ,我们就可以使用这个对象了。

3.prototype

prototype是原型的意思。在JavaScript中,每个对象都有一个prototype属性。这个属性指向一个 prototype对象。这就是原型属性和原型对象的概念。

每个对象都有一个prototype属性,构造函数是一个普通的函数,而函数也是一个对象,因此,构造 函数也有一个 prototype属性。而每个prototype对象都有一个constructor属性,这个prototype对象的 constructor属性指向这个prototype属性所在的构造函数本身。也就是说,new操作符要保证生成的对象 的prototype属性和构造函数的prototype属性是一致的。

有点迷糊了不是?看一下下面的图,无论怎样,都要保证这个图所示的关系式正确的!

需要大家注意的是,这个prototype对象是JavaScript的面向对象的基础,包括继承等的实现都是使 用prototype。

时间: 2024-08-03 18:27:00

JavaScript面向对象程序设计(5) 类的相关文章

javascript面向对象程序设计高级特性经典教程(值得收藏)_javascript技巧

本文实例讲述了javascript面向对象程序设计的高级特性.分享给大家供大家参考,具体如下: 1.创建对象的三种方式: 第一种构造法:new  Object var a = new Object(); a.x = 1, a.y = 2; 第二种构造法:对象直接量 var b = { x : 1, y : 2 }; 第三种构造法:定义类型 function Point(x, y){ this.x = x; this.y = y; } var p = new Point(1,2); 2.访问对象

JavaScript面向对象程序设计教程_javascript技巧

JavaScript中对象的定义为:无序属性的集合,其属性可以包含基本值.对象或者函数.可以把对象想象成散列表,就是一组名值对(key:value),其中值可以是数据或函数,每个对象都是基于一个引用类型创建的. 理解对象 前面的博客里写过创建对象的方式有两种,一种是创建一个object的实例,另一种是使用对象字面量法: var person = new Object(); person.sex = man; person.name = bluce person.age = 58; person.

JavaScript面向对象程序设计(3) 对象

1.对象 对象是面向对象程序设计的基础概念之一,只需看看这个名字就已经知道了.在我们 熟悉的面向对象语言中,比如Java或者C++,都有着类似的对象定义方法.比如,我们想定义一个类,名 字叫Person,有两个属性:name和age,另外有一个方法,将显示出这个Person对象的名字和年龄,那么 我们可以用下面的代码实现: Java: public class Person { private String name; private int age; public String getName

JavaScript面向对象程序设计(1) 前言

基于对象还是面向对象? 面向对象技术是现代软件开发中的重要技术之一.面向对象变成的好处毋庸置疑,现在的主流语言如 Java.C++都是面向对象的.现在的面向对象理论更多的是使用Java或C++进行描述,究其根源,在于这 些语言都是传统的面向对象语言,具有面向对象理论所指明的一切特性:类.封装.继承.多态等等. 相比而言,一些动态语言如JavaSript就显得不那么面向对象--至少,在JavaScript中 并没有类class这一关键字.但是,在JavaScript中并不是没有类的概念.于是有人说

JavaScript面向对象程序设计(8) 优雅的封装还是执行的效率?

优雅的封装还是执行的效率?这是一个悖论. 优雅封装的程序看起来是那么的美妙:每个属性被隐藏在对象之后,你所能看到的就是这个对象让你 看到的,至于它到底是怎么操作的,这个不需要你操心. 执行的效率就是另外一回事.就像是C语言和面向对象的C++之间的差别:C++很优雅,但是执行效率 ,无论是编译后的二进制代码还是运行期的内存的占用,都要比简单的C语言多出一截来. 这个问题在脚本语言中显得更加重要,因为JavaScript根本就是一种解释语言,解释语言的执行效率 要比编译语言低很多. 1.优雅的封装

JavaScript面向对象程序设计(6) 封装

封装是面向对象的重要概念之一.如果一个程序没有封装性,也就谈不上什么面向对象.但是, JavaScript并不像其他的语言,比如 Java,有公有变量和私有变量等:在JavaScript中只有一种作用域 :公有作用域.在本章中,我们将会见识到JavaScript是如何实现封装的特性的. 1.this和公 有变量 首先需要理解this关键字.看下面的一段代码,你应该对此感到熟悉: function Person(name, age) { this.name = name; // 定义一个公有变量

JavaScript面向对象程序设计(2) 数组

或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为--其间的种种 关系吧--嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样 子的. 1.创建数组 在JavaScript中有很多创建数组的方法.比如使用Array函数.不过 这不是现在我们要讲述的.现在我们使用简单的方括号"[]"的办法来创建数组. var objAyyar = []; // 1 var objAyyar = [2]; // 2 var objAyyar = ["a&q

javascript面向对象:JavaScript面向对象程序设计(4): 函数

在很多语言中,函数(Java里面成为方法)和对象时截然不同的两种东西.函数被定义为对象的动作,或者是全局的(像在C++中的main函数一样).但是在JavaScript中,函数和对象的界限却显得不那么明显.1. 函数的定义JavaScript中有很多种定义函数的方法:function hello() { alert("Hello!"); }var hello1 = function() { alert("Hello!"); };var hello2 = new Fu

JavaScript面向对象程序设计(7) 闭包

1.什么是闭包? 什么是闭包?一种正式的解释是:所谓闭包,指的是一种拥有很多变量并且绑定了这些变量的环境的 表达式(通常是一个函数),因而这些变量也是这个表达式的一部分. 相信很多人都不会理解这个定义,因为他的学术味道太浓了--或许你喜欢从字面的语法 上进行分析:首先,它是一个表达式,这个表达式绑定了很多变量以及这些变量的环境.不过这并没有 什么意义,这依然不会告诉我们什么是闭包. 那么,来看一个例子: function add(a) { return function(b) { return