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

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中类的定义及其方式(《javascript高级程序设计》学习笔记)

    关于javascript中类的继承可以参考阮一峰的Blog《Javascript继承机制的设计思想》,说的很透。 一、在javascript中实例化遇到的问题: 下面用《javascript高级程序设计》中的例子来做说明,假如现在定义了一个car的...

    JavaScript手册-中文文档

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

    javascript面向对象编程(中文)

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

    javascript权威指南 epub书及源码

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

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

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

    javascript作业题答案

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

    JavaScript实战.pdf 中文完整版

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

    javascript参考手册

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

    JavaScript语言精粹(高清电子版)和高性能JavaScript 双语版

    7. **正则表达式**:用于文本匹配和处理的强大工具,及其在JavaScript中的应用。 接下来,我们转向《高性能JavaScript》。这本书的重点在于优化JavaScript代码的性能,确保应用程序的高效运行。书中可能包含以下...

    第五版javascript权威指南

    4. **面向对象编程**:尽管JavaScript是非严格的面向对象语言,但它支持基于原型的继承和类的模拟,这部分内容会涵盖类与实例、原型链、继承模式(如构造函数、原型链继承、寄生组合式继承等)。 5. **异步编程**:...

    狂神说系列 JavaScript笔记

    - 类与继承:ES6引入了类的语法糖,以及基于prototype的继承机制。 - 解构赋值:方便地从数组或对象中提取数据,赋值给变量。 - 基于Map和Set的数据结构:提供了新的集合操作,适用于特定场景。 - Generator函数...

    JavaScript经典代码收集

    理解这些类型及其转换规则是JavaScript编程的基础。 2. **控制流**:条件语句如if...else和switch,以及循环语句如for、while和do...while,用于根据特定条件执行代码或重复执行某段代码。另外,break和continue...

    《JAVASCRIPT语言精髓与编程实践》.周爱民PDF

    7. **ES6及以后的版本更新**:书中也会涉及ECMAScript 6及其后续版本的新特性和最佳实践,如箭头函数、模板字符串、类、模块系统等,这些都是现代JavaScript开发不可或缺的知识。 8. **编程实践**:除了理论知识,...

    JavaScript5参考手册

    - 函数是JavaScript中可复用的代码块,可以使用`function`关键字定义。函数可以接受参数,并通过`return`语句返回值。 - 高阶函数,如接受函数作为参数或返回函数的函数,是JavaScript的重要特性。 5. **数组和...

    javascript的骰子

    4. **类(class)和继承**:虽然JavaScript原生支持原型继承,但ES6引入了类的语法,使得面向对象编程更加直观。 5. **解构赋值**:可以方便地从数组或对象中提取值,用于简化代码,比如从事件对象中获取点击事件的...

    javascript完全自学手册光盘源码

    源代码可能涵盖类的定义、继承、封装和多态等概念。 10. **调试技巧**:学会使用console.log、断点、步进执行等工具进行代码调试,是提高开发效率的重要手段。 通过这个源码实例库,学习者可以逐个拆解和运行实例...

    JavaScript 帮助文档

    原型和原型链是JavaScript继承的基础,它们使得对象之间可以共享属性和方法。此外,ES6引入了类(class)语法,提供了更面向对象的编程风格。 事件处理是JavaScript在网页交互中的关键,如点击事件(click)、鼠标...

    《JavaScript入门经典(第6版)》┊ Phil Ballard PDF

    最后,本书还涉及了一些现代JavaScript特性,如ES6及其后续版本的新特性,如箭头函数、模板字符串、类和模块系统等,这些都是现代JavaScript开发不可或缺的部分。 总的来说,《JavaScript入门经典(第6版)》是一本...

Global site tag (gtag.js) - Google Analytics