prototype代表原型,它是JavaScript内置类型的一个属性,它的值表示了一个类的成员的集合。因为Object类型是所有对象的原型,所以自定义类型对象也包含prototype原型对象。prototype对象允许将一个属性添加到指定的类型对象上。
function Person(){
//使用空构造函数定义Person类
};
Person.prototype.setName = function(pName){
//为Person类添加setName方法
this.name = pName;
};
Person.prototype.getName = function(){
//为Person类添加getName方法
return this.name;
}
使用无类型对象的定义方式指定prototype对象
function Person(){
};//使用空构造函数定义Person类
Person.prototype = {
//使用无类型对象指定prototype的值
age:20,
setName:function(pName){
this.name = pName;
},
getName:function(){
return this.name;
},
getInfo:function(){
return "I am " + this.name + ".I'm " + this.age + " years old!";
}
};
Person对象的创建过程解释器首先创建一个新对象,然后让this指针指向它;将函数的prototype对象的所有成员都赋给 这个新对象;执行函数体,对这个对象进行初始化操作;返回已创建的对象。
继承是面向对象思想中另外一个重要的特征
继承为软件开发主要带来两方面的好处:
代码重用
在一定程度上减少显示类型转换的代码
JavaScript是一种弱类型语言,本身也没有严格意义上的类的概念,所以它并不包含显示类型转换的语言特征。
共享prototype实现继承-1
实现继承的主要目的是代码重用,或者说是对象的成员的共享。
protype原型对象是对象成员的集合,因此可以可以通过共享prototype实现继承
ChildObject.prototype = ParentObject.prototype;
创建Mammal类
function Mammal(){
//哺乳动物类定义
this.name = "Mammal";//添加name成员属性
}
Mammal.prototype.eat = function(){
//添加eat成员方法
alert(this.name + " is eating!");
};
Mammal.prototype.sound = function(){
//加sound成员方法
alert(this.name + " is sounding.....");
};
创建Cat类
function Cat(){
//猫类定义
this.name = "Cat";//添加name成员属性
}
//通过prototype对象共享实现Cat继承Mammal
Cat.prototype = Mammal.prototype;
var cat = new Cat();
cat.eat();
cat.sound();
重写Cat类的sound方法
Cat.prototype.sound = function(){
//重写Mammal类的sound方法
alert(this.name + " is miaowing!")
}
var m = new Mammal();
m.eat();
m.sound();
利用共享prototype对象实现JavaScript继承虽然简单,但如果子类重写了父类的方法,父类也会受到影响
通过复制一份父类prototype对象中的成员集合给子类,这样子类在重写方法时就不会影响到父类了
for(var i in Mammal.prototype){
//遍历原型对象中的类成员
Cat.prototype[i] = Mammal.prototype[i];//进行原型复杂
}
大部分面向对象语言为了定义抽象方法或抽象类都提供了诸如“abstract”、“virtual”等关键字。
JavaScript语言中虽未提供类似的关键字,但实现抽象的方式却异常简单。
在JavaScript中,抽象方法是没有被定义、但却被this指针直接引用的方法。(在一种已经说了)
function Shape(){}//创建形状类
//为Shap类添加drawShap方法,注意其中调用了一个未定义的抽象方法
rawShape.prototype.drawShap = function(){
this.draw();//可以当做是一个abstruct
}
创建圆类和正方形类
function Circle(){}//创建圆形类
function Square(){}//创建正方形类
利用反射机制实现圆形类继承形状类、正方形继承形状类
for(var i in Shape.prototype){
Circle.prototype[i] = Shape.prototype[i];
Square.prototype[i] = Shape.prototype[i];
}
为Circle类和Square类添加draw抽象方法实现
Circle.prototype.draw = function(){
alert("画圆...");
};
Square.prototype.draw = function(){
alert("画正方形...");
};
测试
var shape1 = new Circle();
var shape2 = new Square();
shape1.drawShap();
shape2.drawShap();
分享到:
相关推荐
在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...
在JavaScript面向对象的上下文中,我们可以创建专门处理Canvas绘图的类,封装复杂的绘图逻辑: ```javascript class Circle { constructor(x, y, radius) { this.x = x; this.y = y; this.radius = radius; } ...
在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...
以下是对JavaScript面向对象和原型机制的详细解释: 1. 面向对象的基本概念: - 类:在许多面向对象语言中,类是创建对象的模板,但在JavaScript中没有类的概念。 - 对象:JavaScript中的对象是一组键值对,可以...
在本文中,我们将介绍JavaScript面向对象编程中的经典案例,包括对象、类、继承、原型链和闭包等概念。 一、对象和类 在JavaScript中,对象是指一个实体,可以拥有自己的属性和方法。对象可以使用工厂函数或构造...
### 面向对象JavaScript精要 #### 一、书籍概览 本书《面向对象JavaScript精要》由Nicholas C. Zakas编写,是面向对象编程领域中的权威指南之一,尤其针对JavaScript这门语言。作者深入浅出地介绍了面向对象编程的...
JavaScript是一种广泛应用于Web开发的动态编程语言,尤其以其强大的面向对象特性而闻名。面向对象编程(Object-Oriented ...通过阅读`prototype.js`这样的示例代码,可以帮助加深对JavaScript面向对象编程的理解。
### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...
JavaScript是一种广泛应用于Web开发的动态编程语言,尤其在构建交互式网页和富互联网应用...《JavaScript面向对象编程指南》这本书将帮助你进一步探索这个主题,通过实例和详细的解释,提升你的JavaScript编程技能。
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
JavaScript面向对象编程是指在JavaScript语言中使用面向对象的方法来编写程序。JavaScript是一种高级的、解释型的编程语言,它支持面向对象的编程范式,允许开发者创建对象、使用继承和多态等面向对象的特性。以下是...
JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 首先,让我们深入理解对象。在JavaScript中,一切皆为对象,包括函数。你可以直接通过对象字面量或者构造函数来创建对象。对象...
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
"javascript面向对象框架"这一主题涵盖了JavaScript中实现面向对象编程的框架,特别是Prototype和MooTools这两个优秀的库。 Prototype是JavaScript的一个开源库,它扩展了JavaScript的基本对象和函数,提供了强大的...
在JavaScript中,面向对象主要通过构造函数、原型链、原型对象和闭包等机制来实现。 1. **构造函数**:构造函数在JavaScript中扮演着类的角色,它们通常用来初始化新创建的对象。我们可以通过`new`关键字调用构造...
下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...
JavaScript面向对象编程是一种基于原型(Prototype)的编程范式,它是动态类型语言,允许开发者创建具有复杂特性的对象。在JavaScript中,面向对象主要通过构造函数、原型链和闭包来实现。以下是对这一主题的详细...
### JavaScript面向对象精要 #### 一、概述 《JavaScript面向对象精要》是一本深入讲解JavaScript面向对象编程原理的专业书籍。本书由知名的前端开发者Nicholas C. Zakas撰写,全面介绍了JavaScript作为一种动态...
在这个“JavaScript面向对象基础”的资料中,我们将会探讨JavaScript中的类、对象、封装、继承以及多态等关键概念。 1. **对象与对象字面量** 在JavaScript中,对象是由键值对组成的无序集合,可以使用对象字面量...