`
hjj20040849
  • 浏览: 115047 次
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

javascript其实也是一种面向对象编程语言,他同样可以实现面向对象语言的三大特性------封装,继承,多态。封装我想大家都知道了,在这里我们重点讲一下javascript的继承。

 

1、怎么用javascript编写一个类

     (1)目前,很多面向对象语言都定义了class来定义一个类,但是javascript并没有,那么我们应该怎么去用它来编写一个类呢?

其实我们简单的是使用function就可以啦。下面给一个例子,我想大家看后就会明白的啦。在实例中学习嘛,哈哈。

 

function Person(){		//定义一个Person类
		this.name;
		this.age;
		this.showInfo = function(){	//封装一个方法,让Person类输出自己的相关信息
			document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");	
		}
	}
	
	var person = new Person();	//创建Person类的实例
	person.name = "tom"; //为Person类的属性赋值
	person.age = 11;
	person.showInfo(); //调用Person类的方法

 在浏览器中的结果显示为:

 

大家好,我是 tom ,今年 11 岁啦!

但是如果我们想要给函数定义一个构造函数怎么办,看这个例子你就懂了:

 

	function Person(myName, myAge){		//定义一个Person类
		this.name = myName;
		this.age = myAge;
		this.showInfo = function(){	//封装一个方法,让Person类输出自己的相关信息
			document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");	
		}
	}
	
	var person = new Person("tom", 11);	//创建Person类的实例
	person.showInfo(); //调用Person类的方法

 

 结果显示跟上面一样。

 

2、怎么实现继承特性

那么我们用javascript编写好一个类后,我们怎么去实现继承呢?这个就涉及到我们前面所学的prototype啦。

	//定义一个父类Person
	function Person(){
		this.name ;
		this.age ;
		this.showInfo = function(){	//封装一个方法,让Person类输出自己的相关信息
			document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");	
		}
	}
	
	//定义一个子类Child
	function Child(){}
	
	Child.prototype = new Person(); //继承Person

	var child = new Child();
	child.name = "Cat";
	child.age = 11;
	child.showInfo();
 

 

在浏览器中显示的结果为:

 

大家好,我是 Cat ,今年 11 岁啦!

 

 

在该实例中,重点在于prototype,我们继承就是通过这个来实现的啦,这个将涉及到原型,深入就到后面再讲,在这篇文章中,主要是为了让我们知道,继承是通过这个方式来实现的,当然还有另外一中形式。下面就来说一下吧。

 

3、使用$super实现访问父类

 

很多面向对象编程语言中,都会定义关键字super来访问父类,但是javascript里面没有,所以我们必须要先自己定义来实现这个功能,鉴于javascript所有的类都是有Object派生而来的,我们就为Object新定义一个$super方法,该方法可以用于其他所有的类。

 

 

//自定义$super()方法,用于访问父类
	Object.prototype.$super = function(){
		var result;
		try{
			result = eval(this.constructor).prototype.constructor;
			result.apply(this, arguments);	
		}catch(err){
			throw new Error("only can be used in constructor");
		}
		return result;
	}

 

 

然后我们就可以使用这个方法啦:

 

function Child(){
		this.$super(myName, myAge);  //调用父类的构造函数
	}

 

 下面给出一个完整示例,让大家对它的用法更加清晰吧。

例1(仍然使用prototype来实现继承):

 

	//自定义$super()方法,用于访问父类
	Object.prototype.$super = function(){
		var result;
		try{
			result = eval(this.constructor).prototype.constructor;
			result.apply(this, arguments);	
		}catch(err){
			throw new Error("only can be used in constructor");
		}
		return result;
	}
	
	//定义一个父类Person
	function Person(myName, myAge){
		this.name = myName;
		this.age = myAge;
		this.showInfo = function(){	//封装一个方法,让Person类输出自己的相关信息
			document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");	
		}
	}
	
	//定义一个子类Child
	function Child(myName, myAge){
		this.$super(myName, myAge);//调用父类的构造函数
	}
	
	Child.prototype = new Person(); //继承Person

	var child = new Child("Tom", 11);
	child.showInfo();

 

示例2(仍然使用$super来实现继承):

 

	Object.prototype.$super = function(){
		var result;
		try{
			result = eval(this.constructor).prototype.constructor;
			result.apply(this, arguments);	
		}catch(err){
			throw new Error("only can be used in constructor");
		}
		return result;
	}
	
	//定义一个父类Person
	function Person(myName, myAge){
		this.name = myName;
		this.age = myAge;
		this.showInfo = function(){	//封装一个方法,让Person类输出自己的相关信息
			document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");	
		}
	}
	
	//定义一个子类Child
	function Child(myName, myAge){
		this.$super = Person;	//继承Person
		this.$super(myName, myAge);
	}
	
	var child = new Child("Tom", 11);
	child.showInfo();
	

 两个示例输出的结果均为:

 

大家好,我是 Tom ,今年 11 岁啦!
分享到:
评论

相关推荐

    浅析JavaScript实现基于原型对象的“继承”.pdf

    JavaScript的基于原型的继承风格使用起来非常灵活、高效,但对于初学者,要准确理解原型对象及其继承机制还是比较困难。本文将对JavaScript原型继承的方式进行介绍,并结合实例进行分析。 基于类的继承 面向对象...

    面向对象JavaScript精要(英文原版pdf)

    - **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及...

    JavaScript手册-中文文档

    JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的、解释型的编程语言,主要用于增强网页的交互性。这份“JavaScript手册—中文文档”提供了一个全面的JavaScript学习资源,涵盖了从基础语法到高级特性的...

    浅析javascript原型继承机制

    本文将深入探讨JavaScript中的原型继承机制,帮助读者理解其中的关键概念及其工作原理。 #### 二、原型与构造函数 在JavaScript中,每个函数都有一个特殊的属性——`prototype`。当一个函数被用作构造函数时,它的...

    JavaScript继承的特性与实践应用深入详解

    在JavaScript中,继承并不是基于传统的类,而是基于原型(prototype)。这意味着一个对象可以直接从另一个对象继承属性和方法。下面将深入探讨JavaScript继承的特性及其实践应用。 1. 伪类继承: JavaScript 的...

    面向对象的_JavaScript_编程及其_Scope_处理

    ### 面向对象的JavaScript编程及其Scope处理 #### 一、JavaScript的面向对象特性 JavaScript作为一种弱类型的脚本语言,虽然本质上不是一种面向对象的语言,但我们可以通过巧妙地利用其特性来实现面向对象编程...

    javascript面向对象编程(中文)

    9. **类的静态属性和方法**:在JavaScript的类语法中,可以定义静态属性和方法,它们不归属于任何实例,而是直接属于类本身。 10. **鸭子类型和接口**:JavaScript中没有强制的类型检查,因此实现接口的方式比较...

    javascript权威指南 epub书及源码

    另外,随着ES6(ECMAScript 2015)及其后续版本的发布,JavaScript引入了许多新的语法特性,如箭头函数、模板字符串、let和const变量、解构赋值、模块导入导出、类和扩展运算符等。这些新特性提高了代码的可读性和可...

    全站开发javascript

    JavaScript中的数据类型有Number、String、Boolean、null、undefined、数组和对象等,这些类型及其操作构成了编程的基础。 接着,掌握条件判断和循环结构对于编写有效的JavaScript代码至关重要。Map和Set是ES6引入...

    web前端开发笔试集锦(javascript篇)定义.pdf

    5. 多人开发中的函数重名问题:为避免重名,可以制定命名规范,如在函数名前加上开发人员的名字或功能前缀,或者将函数封装到类中,通过类的方法调用。 6. 面向对象的继承:JavaScript的继承主要通过构造函数和...

    javascript 经典面向对象设计

    - **类与继承**:ES6中的`class`语法提供了一种更加直观的方式来定义类和实现继承。例如: ```javascript class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' ...

    javascript作业题答案

    在这个"javascript作业题答案"的压缩包中,我们可以期待找到一系列与JavaScript相关的练习题及其解答,这对于学习和掌握JavaScript的重要知识是非常有帮助的。 首先,JavaScript的核心知识点包括变量、数据类型、...

    Javascript.info Ebook Part 1 The JavaScript language (2019).pdf

    - 类的基本语法和继承。 - 静态属性和方法以及私有和受保护属性的使用。 - 混入(Mixins)的概念。 **错误处理和异步编程** 对于错误处理和异步编程,教程涵盖了以下内容: - 错误处理和`try..catch`语句。 - ...

    JavaScript面向对象精要(英文版)

    ES6引入了`class`语法,使得在JavaScript中定义类变得更加直观。实际上,ES6的类语法是对原型继承的一种封装,它提供了一种更加清晰的方式来组织代码。 ##### 3.1 定义类 ```javascript class Person { ...

    .Principles.of.Object-Oriented.Programming.in.JavaScript

    对于那些熟悉C++或Java等语言中的类为基础的OOP模型的开发者来说,JavaScript提供了另一种实现OOP的方式——基于原型的继承。 #### 书籍简介与适用人群 本书适合所有对JavaScript和面向对象编程感兴趣的开发者。...

    JavaScript实战.pdf 中文完整版

    7. 类与模块:在ES6中,了解类的概念及其与传统构造函数的关系,以及模块系统(import和export)的应用。 三、高级JavaScript特性 8.闭包:理解闭包的定义,以及它在内存管理、数据封装和异步编程中的重要性。 9. ...

    javascript参考手册

    这个中文手册可能是对ECMAScript标准的详细解读,包括最新的ES6及其后续版本的新特性,如箭头函数、模板字符串、Promise、Generator、Async/Await、模块化(import/export)、类和继承等。此外,还可能涉及错误处理...

Global site tag (gtag.js) - Google Analytics