首页 » 学习JavaScript数据结构与算法(第2版) » 学习JavaScript数据结构与算法(第2版)全文在线阅读

《学习JavaScript数据结构与算法(第2版)》1.6 JavaScript面向对象编程

关灯直达底部

JavaScript里的对象就是普通名值对的集合。创建一个普通对象有两种方式。第一种方式是:

var obj = new Object;  

第二种方式是:

var obj = {};  

也可以这样创建一个完整的对象:

obj = {  name: {    first: 'Gandalf',    last: 'the Grey'  },  address: 'Middle Earth'};  

可以看到,声明JavaScript对象时,键值对中的键就是对象的属性,值就是对应属性的值。在本书中,我们创建的所有的类,如StackSetLinkedListDictionaryTreeGraph等,都是JavaScript对象。

在面向对象编程(OOP)中,对象是类的实例。一个类定义了对象的特征。我们会创建很多类来表示算法和数据结构。例如我们声明了一个类来表示书:

function Book(title, pages, isbn){  this.title = title;  this.pages = pages;  this.isbn = isbn;}  

用下面的代码实例化这个类:

var book = new Book('title', 'pag', 'isbn');  

然后,我们可以访问和修改对象的属性:

console.log(book.title); //输出书名book.title = 'new title'; //修改书名console.log(book.title); //输出新的书名  

类可以包含函数。可以声明和使用函数,如下所示:

Book.prototype.printTitle = function{  console.log(this.title);};book.printTitle;  

也可以直接在类的定义里声明函数:

function Book(title, pages, isbn){  this.title = title;  this.pages = pages;  this.isbn = isbn;  this.printIsbn = function{  console.log(this.isbn);  }}book.printIsbn;  

 在原型的例子里,printTitle函数只会创建一次,在所有实例中共享。如果在类的定义里声明,就像前面的例子一样,则每个实例都会创建自己的函数副本。使用原型方法可以节约内存和降低实例化的开销。不过原型方法只能声明公共函数和属性,而类定义可以声明只在类的内部访问的私有函数和属性。ECMAScript 6引入了一套既像类定义又基于原型的简化语法。稍后我们会进一步讨论。