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

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

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

    JavaScript你一定要搞懂的原型链

    在 JavaScript 中,每个对象都有一个原型 (prototype),它定义了对象的属性和方法。对象可以通过原型链访问到其原型的属性和方法。 原型链图将对象及其原型表示为节点,并使用箭头表示原型关系。每个节点表示一个...

    learn[removed]一个简单的示例,了解Javascript及其概念的工作方式

    ES6类和继承ES6-classes.js 如何定义班级 //CODE GOES HERE}```如何定义构造函数 constructor(){ //INITIAL PROPERTIES GOES HERE }}```如何添加方法 constructor(){ //INITIAL PROPERTIES GOES HERE } METHODNAME()...

    VanillaJS-Object-Oriented-Notes:有关JS ES6的面向对象的注释

    目录教程1 ES5构造函数,定义一个对象。教程2 将其他类型定义为...Tutorial6,Tutorial7 [Javascript ES 6 +] 定义类,构造函数,就像其他编程语言一样。 清除oop代码,super()方法,并扩展为从另一个类继承到该类。

    DHtmlXTree中文使用手册2.0版本

    该组件允许您以编程定义界面结构,包括大小元素及其布局。 最终用户可以轻松地调整,倒塌或扩大这些界面元素。 从版本2.0,dhtmlxLayout提供了 DHTMLX组件与其他高层次的集成 ,如 dhtmlxGrid ,dhtmlxTree , ...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    经典类与新式类的继承顺序 继承实例讲解 多态实例讲解 本节作业之选课系统开发 第7周 心灵分享 上节回顾 静态方法、类方法、属性方法 课堂扯淡 深入讲解类的特殊成员方法__init__等 深入讲解类的特殊成员方法__new...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的...

    【卷一/共两卷】AJAX实战pdf高清版90M

    4.3.3 在JavaScript中实现灵活的事件模型 4.4 Ajax应用中的模型 4.4.1 使用JavaSctjpt为业务领域建模 4.4.2 与服务器交互 4.5 从模型生成视图 4.5.1 JavaScript对象的反射 4.5.2 处理数组和对象 4.5.3 添加控制器 ...

    Java语言基础下载

    构造方法在继承中的使用 96 super关键字 97 包装类 97 toString( )方法 100 内容总结 101 独立实践 102 第七章:类的高级特征 103 学习目标 103 static关键字 104 final关键字 106 内部类 106 实例分析 110 抽象类,...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    2.4.1 调试页面中的javascript脚本(方法一) 22 .2.4.2 调试页面中的javascript脚本(方法二) 23 2.4.3 调试非嵌入式javascript脚本文件 23 2.4.4 调试嵌入式javascript脚本资源文件 24 2.4.5 高效率调试的...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    .2.4.2 调试页面中的javascript脚本(方法二)23 2.4.3 调试非嵌入式javascript脚本文件23 2.4.4 调试嵌入式javascript脚本资源文件24 2.4.5 高效率调试的技巧24 2.5 ajax library对javascript调试支持26 2.6 ...

    asp.net知识库

    运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...

    精通JS脚本之ExtJS框架.part2.rar

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    精通JS脚本之ExtJS框架.part1.rar

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    asp.net面试题

    然而,结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。 12.概述.NET里对 remoting 和 ...

    Ext Js权威指南(.zip.001

    1.2.4 在javascript中使用json / 4 1.2.5 在.net中使用json / 8 1.2.6 在java中使用json / 12 1.2.7 更多有关json的信息 / 15 1.3 ext js 4概述 / 15 1.4 ext js的开发工具的获取、安装与配置介绍 / 18 1.4.1...

    CPPUnitExample:TDD 示例(使用 C++ 和 CppUnit)

    功能和类的描述 使用 CPPUnit: :定义用例或测试。 函数(继承自 CppUnit::TestCase)“void runTest()”被覆盖。 :定义一组用例或测试。 使用静态函数创建并返回 CppUnit :: Test 类型的对象。 该对象包含测试...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    可以在管理页面上添加博文的分类,可以上传图片和游览自己的相册,在上传过程中可以将一张图片定义为自己的签名,在个人管理页面中注册用户还可以修改自己的个人信息。博文管理,友情链接管理及博文分类管理,用例图...

Global site tag (gtag.js) - Google Analytics