博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript学习(6)——[基础回顾]继承/聚合
阅读量:6363 次
发布时间:2019-06-23

本文共 3272 字,大约阅读时间需要 10 分钟。

本次博客主要说下继承和聚合在javascript中的应用:

继承在前边的第五篇中也有所涉及,其实也挺简单的,

下面粘一段代码:

/** * 继承 */(function(){	//创建一个人员类	function Person(name){		this.name = name;	}	//创建教师类	function Teacher(name,books){		//call方法可以将一个函数的对象上下文从初始化变成有this来决定		//调用Person的构造函数,因为Person没用new 所以他是个空对象		//相当于java中的super函数		Person.call(this,name);		this.books = books;	}	//使老师类继承人员类	Teacher.prototype = new Person();	Teacher.prototype.constructor = Teacher;	//给Teacher扩展一个函数	Teacher.prototype.getBook = function(){		return this.name +" "+ this.books;	}	//测试	var jim = new Teacher("JIM","EXTJS4");	//alert(jim.getBook());		/**	 * 创建Extend函数为了程序中石所有的集成操作	 */	function extend(subClass,superClass){		//1.叫子类原型类属性等于父类的原型属性		//初始化一个中间空对象,为了转换主父类关系		var F = function(){};		F.prototype = superClass.prototype;		//2.让子类集成F		subClass.prototype = new F();		subClass.prototype.constructor = subClass;		//3.为子类增加属性superClass		subClass.superClass = superClass.prototype;		//4.增加一个保险,就算你是的原型类是超类(Object) 那么也要把你的构造函数级别降下来		if(superClass.prototype.constructor == Object.prototype.constructor){			superClass.prototype.constructor = superClass;		}	}	//测试	function Author(name,books){		Author.superClass.constructor.call(this,name);		//Person.call(this,name);		this.books = books;		this.getBook = function(){			return this.name +" "+ this.books;		}	}	//继承	extend(Author,Person);	//彼德	var peter = new Author("YUNFENGCHENG","JAVASCIPT");	alert(peter.getBook())})()
其实用到最多的就是下面两句:

//使老师类继承人员类	Teacher.prototype = new Person();	Teacher.prototype.constructor = Teacher;
这两句的意思说的是:首先我将Teacher类的prototype的指针指向Person类,另外是将Teacher类的构造方法的指针还是让其指向自己。

其中call(),当然还要一个类似函数apply(),我们之后会专门拿出一篇文章来解释一下,ms我之前有转载过一篇写的不错的文章,大家可以找下,我也会将其引入这个专题来。

------------------------

好吧,我还是想忍不住想说一下call 和 apply的用法和简单的说下他们之间的不同,另外将我转载的一篇博客的地址放在这里,供大家参考。

call方法:

a.fun.call(b,"c","d");

简单的说来,它的意思就是a对象的fun函数可以叫b来执行,其中c和d是属于传入的参数,也就是说如果b来执行继承过来a的fun函数的时候,可以将其这两个参数调用;

call与apply之间的不同之处就是在后边参数的不同,call可以是任意类型,而apply必须是数组。

转载文章是:

聚合:

有的时候不需要严格的继承,我们真正需要的是一个类(几个)中的的一些函数,有的时候我们又叫掺元类。

/** * 掺元类 * 有的时候不需要严格的继承,我们真正需要的是一个类(几个)中的的一些函数 *  */(function(){	//我们准备将要被聚合的函数	var JSON = {		toJSONString :function(){			var outPut = [];			for(key in this){				outPut.push(key+" --> "+this[key])			}			return outPut;		}	};	/**	 * 聚合函数	 */	function mixin(receivingClass,givingClass){		for(methodName in givingClass){			if(!receivingClass.__proto__[methodName]){				receivingClass.__proto__[methodName] = givingClass[methodName]			}		}	}	var o = {name:"YUN",age:27}	mixin(o,JSON);	document.write(o.toJSONString().join(","))//	JSON.prototype = { //如果说不用prototype//		toJSONString :function(){//			var outPut = [];//			for(key in this){//				outPut.push(key+" --> "+this[key])//			}//			return outPut;//		}//	}//	//制作聚合函数//	function mixin(receivingClass,givingClass){//		for(methodName in givingClass.prototype){//			//本类中没有这个函数的情况下我在聚合,否则跳过//			if(!receivingClass.prototype[methodName]){//				receivingClass.prototype[methodName] = givingClass.prototype[methodName]//			}//		}//	}//	//var o = {name:"YUN",age:27}//	var o = function(){//		this.name = "YUN";//		this.age = 17//	}//	mixin(o,JSON);//	var a = new o();//	document.write(a.toJSONString().join(","))})()
其实聚合的方法,显得更加的简单,就是当我们取到原型链的上端时,然后将方法名和方法体赋值过来就行了,由于对象直接继承原型,所以原型链的函数就直接能够继承了。

转载于:https://www.cnblogs.com/sunyingyuan/p/3686226.html

你可能感兴趣的文章
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
回顾小程序2018年三足鼎立历程,2019年BAT火力全开
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
C# 8新提案让泛型Attribute成为现实
查看>>
ASP.NET Core:简洁的力量
查看>>
关于AWS的Firecracker,技术人应该知道的十件事
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
2017 Vue.js 2快速入门指南
查看>>