`
Finder
  • 浏览: 27471 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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。

 

4. 一个实现技巧:检测参数非空和设置参数默认值

 

由于JavaScript函数对于参数控制比较困难,因此参数检测成为一个不可忽视的问题。这里给出一个编程的小技巧,能够检查传入的实参是否非空,以及给参数设置默认值。

 

function print(mustHave, person) {
    var defaultPerson = {
        name: "noname",
        age: 0
    };
    if(!mustHave) { // 非空检测
        alert("mustHave should not be null!");
        return;
    }
    person = person || defaultPerson; // 设置默认值
    alert(mustHave + ": name- " + person.name + "; age- " + person.age);
}
print();
print("sth");
print("sth", {name: "new", age: 20});

 

非空检测比较简单。默认值的设置比较有技巧,利用了JavaScript的||操作的短路特性。如果形参person为空,那么||前半部分为false,通过或操作,将把person设置为defaultPerson;如果person非空,则||直接返回true,那么就不进行或操作。

  • 大小: 7.2 KB
分享到:
评论
2 楼 seven_cuit 2009-07-18  
seven_cuit 写道
楼主说错了一点,应该是构造器具有 .constructor 属性,而对象具有 .prototype 属性

失误 改正如下:构造器有<prototype>属性,而对象有<constructor>属性
1 楼 seven_cuit 2009-07-18  
楼主说错了一点,应该是构造器具有 .constructor 属性,而对象具有 .prototype 属性

相关推荐

    JavaScript程序设计课件:面向对象概述.pptx

    JavaScript程序设计 面向过程与面向对象 6.1.1 面向过程与面向对象 1、概念 面向过程(Procedure Oriented)也可称之为“面向记录”,是一种以过程为中心的编程思想。它注重的是具体的步骤,只有按照步骤一步一步...

    JavaScript面向对象程序设计

    在JavaScript面向对象编程中,随着Web2.0和Ajax技术的普及,JavaScript的角色从简单的表单验证扩展到了复杂的数据交互和页面动态更新。采用面向对象的编程风格可以使代码结构更加清晰,便于管理和维护。例如,...

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    Java面向对象程序设计是计算机科学中的一个重要主题,尤其在Java编程中。邢国波的《Java面向对象程序设计》一书旨在帮助读者理解和掌握Java语言的核心特性,特别是面向对象编程的概念。以下是根据提供的内容和标签...

    JavaScript 面向对象程序设计

    本章将深入探讨JavaScript中的面向对象程序设计。 首先,JavaScript中的类是通过函数来定义的。一个函数不仅可以作为一个独立的执行单元,也可以作为类的构造函数,用来初始化新创建的对象。例如: ```javascript ...

    Javascript面向对象程序设计培训讲义

    由于JS不是纯的面向对象的语言,所以对象的继承是以原型函数的形式继承的,很多人刚开始接触的时候不太理解,但是JS这种以原型函数的形式实现面向对象技术,不仅是可行的,而且还为面向对象技术提供了动态继承的功能...

    javascript 面向对象程序设计博客文章

    面向对象程序设计(Object-Oriented Programming,简称OOP)是软件工程中的一个重要概念,它通过类和对象来组织代码,实现数据封装、继承和多态等核心特性。在JavaScript中,虽然没有传统的类,但它提供了基于原型的...

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的..., 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库。

    面向对象的程序设计(01)

    面向对象的程序设计:ECMA-262 对对象的定义为:无序的属性集合,其属性包含 ECMAScript 中的基本类型、对象及函数。 简单来讲,对象就是一组没有顺序的值。 对象的每个属性或者方法都有一个标识名,而每个标识名都...

    JavaScript面向对象程序程序设计PPT与代码

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在构建交互式网页和...这份"JavaScript面向对象程序程序设计PPT与代码"资源将详细解释这些概念,并可能包含实际示例,帮助你深入理解和应用这些面向对象编程技术。

    基于JavaScript的面向对象程序设计研究.pdf

    基于JavaScript的面向对象程序设计研究 本文对基于JavaScript的面向对象程序设计进行了深入研究。研究发现,JavaScript语言具有良好的面向对象特性,特别是在封装性、继承性和多态性等方面。本文对JavaScript的面向...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    javascript 经典面向对象设计

    标题“JavaScript经典面向对象设计”指出了本书的主要内容是关于如何使用面向对象编程(OOP)原则和技术来编写高质量、可扩展且可重用的JavaScript应用程序及库。描述中提到本书相比其他中文资料更为清晰,深入到...

    JavaScript面向对象编程指南.pdf

    JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库

    面向对象JavaScript开发

    JavaScript,作为一种广泛应用...JavaScript 面向对象程序设计——继承与多态.pdf 和 JavaScript 面向对象程序设计——封装.pdf 这两个文档可能深入探讨了这些主题,帮助读者深入理解并掌握JavaScript的面向对象开发。

    javascript面向对象编程(中文).pdf

    ### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...

    javascript面向对象编程

    资源名称:Javascript面向对象编程   内容简介: 从语言的视角来看,面向对象的程序设计和面向对象的Javascript 语言绝对不是什么摩登的  东西;Javascript 最开始就是被设计成一...

    JavaScript面向对象程序设计创建对象的方法分析

    本文实例讲述了JavaScript面向对象程序设计创建对象的方法。分享给大家供大家参考,具体如下: 面向对象的语言具有一个共同的标志,那就是具有“类”的概念,但是在javascript中没有类的概念,在js中将对象定义为...

Global site tag (gtag.js) - Google Analytics