我们使用JavaScript为实现以下面向对象特性:
1.对象、类; 2.封装; 3.继承
一、对象
在JavaScript中创建一个对象非常简单,我们可以使用内建的Object对象来创建一个对象:
var myObj = new Object;
myObj.name = 'sam';
myObj.age = 24;
同样我们也可以使用JSON(JavaScript Object Notation)来创建一个对象:
var myObj ={name:'sam',age:24};
二、类
JavaScript通过构造函数和原型对象(prototype)来实现类的创建:
function Person(name,age){ //定义构造方法
this.name = name;
this.age = age;
}
var sam = new Person('sam',24);
alert(sam.name); //输出结果为 sam
var bob = new Person('bob',30);
alert(bob.age); //输出结果为 30
下面将在Person类中添加一下方法:
function Person(name,age){
this.name = name;
this.age = age;
this.introduceSelf = function(){
alert('I am '+name+', I am '+age+' years old.');
}
}
var sam = new Person('sam',24);
sam.introduceSelf(); //输出结果为: I am sam, I am 24 years old.
var bob = new Person('bob',30);
bob.introduceSelf(); //输出结果为: I am bob, I am 30 years old.
上面的添加方法的方式不是很好,因为introduceSelf函数对于所有Pesron的实例来说不,都是一样的,我们不希望在实例级别加上一个对于所有实例来说都是一样的方法。这里我们要引入原型对象(prototype)
function Person(name,age){//定义构造方法(类)
this.name = name;
this.age = age;
}
Person.prototype.kind = 'animal'; //在原型对象中添加一下属性kind
//创建两个实例
var p1 = new Person('sam',24);
var p2 = new Person('bob',30);
//访问这两个实例的kind属性
alert(p1.kind); //输出结果animal
alert(p2.kind); //输出结果animal
通过上面的例子,我们可以看到函数的原型对象对于所有的实例来说是共享的,并且属性的访问方式和实例本身的属性文章方式一样
如果修改这个属性呢?
p1.kind = 'male';
alert(p1.kind); //输出结果 male
alert(p2.kind); //输出结果 animal
对于属性的访问,JavaScript会从对象的本身开始查找,如果找到则返回找到的值,如果没有,才会在其原型对象中查找
回到原来的例子,在构造函数Person的原型对象上添加一个方法,这样这个方法就会被所有的Person对象共享:
Person.prototype.introduceSelf = function(){
alert('I am '+this.name+' , I am '+this.age+' years old');
}
var p1 = new Person('sam',24);
var p2 = new Person('bob',30);
p1.introduceSelf(); //输出结果为:I am sam, I am 24 years old
p2.introduceSelf(); //输出结果为:I am bob, I am 30 years old
三、多态
JavaScript允许我们将任意一个函数分配给对象的一个属性。当使用obj.function的语法调用函数时,将把函数原来定义this的指向当前这个对象的obj。所以,我们可以通过定义有相同的方法的对象,来简单地实现多态(polymorphism)
//定义一个dogSpeek函数
function dogSpeek(){
alert('I am '+this.name);
}
//定义一个Dog类
function Dog(){
this.name = name;
this.speek = dogSpeek();//将dogSpeek函数赋给Dog的speek属性
}
//定义一个catSpeek函数
function catSpeek(){
alert('I am '+this.name);
}
//定义一个Cat类
function Cat(){
this.name = name;
this.speek = catSpeek();//将catSpeek函数赋给Cat的speek属性
}
var dog = new Dog;
dog.speek();//输出'I am dog'
var cat = new Cat;
cat.speek();//输出'I am cat'
对于同一个方法,不同类的对象就展现出不同的行为,这样就实现了多态性。
四、继承
分享到:
相关推荐
在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...
JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库
《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的..., 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库。
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...
总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...
下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...
JavaScript面向对象编程指南是完整的扫描版...
javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...
JavaScript面向对象编程.pdf
资源名称:Javascript面向对象编程 内容简介: 从语言的视角来看,面向对象的程序设计和面向对象的Javascript 语言绝对不是什么摩登的 东西;Javascript 最开始就是被设计成一...
在JavaScript面向对象编程中,随着Web2.0和Ajax技术的普及,JavaScript的角色从简单的表单验证扩展到了复杂的数据交互和页面动态更新。采用面向对象的编程风格可以使代码结构更加清晰,便于管理和维护。例如,...
JavaScript 面向对象 编程指南 完整扫描版