博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟我一起动手写js库--JavaScript之继承与多态
阅读量:6805 次
发布时间:2019-06-26

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

hot3.png

继承的话我这里主要是传统的原型继承方式。关于原型继承,这个在网上已经有现有的轮子了(参考了慕课网Bosn老师的JavaScript深入浅出一篇的原型继承的视频讲解),我就站在巨人的肩上给稍微改动了下了

Object.prototype.extends = function(SuperClass) {		if(!Object.create) {		Object.create = function(proto) {			function F() {								F.prototype = proto;				return new F;			}		}	}	var oldPrototype = this.prototype;	this.prototype = Object.create(SuperClass.prototype);	//	this.prototype.constructor = SuperClass;	for(key in oldPrototype) {		oldPrototype[key] !=undefined && (this.prototype[key]=oldPrototype[key]);	}	this.prototype.__parent__ = SuperClass;};Object.prototype.super = function() {		var param = arguments[0];	var arg = arguments;		while(param) {				if(!param.callee) {			break;		}		arg = param;		param = param[0];	}	var parent = this;		while(parent) {				for(var key in parent) {//首次子类调用该方法						if(arguments[0].callee == parent[key]) {//找到对应父类				arg.callee = arguments[0].callee;				parent.__parent__.prototype[key].apply(this, arg);				return;			}		}		for(var key in parent.prototype) {						if(arguments[0].callee == parent.prototype[key]) {//找到对应父类				arg.callee = arguments[0].callee;				parent.prototype.__parent__.prototype[key].apply(this, arg);				return;			}		}		parent = parent.__parent__;	}};Object.defineProperties(Object.prototype, {	'extends': {		enumerable: false,		writable: false	},	'super': {		enumerable: false,		writable: false	}});

使用例子:

var Person = function() {};Person.prototype = {    say: function() {        console.log("person say");    }};var Father = function() {};Father.prototype = {    say: function() {        this.super(arguments);        console.log("father say");    }}Father.extends(Person);var Son = function() {};Son.prototype = {    say: function() {        this.super(arguments);        console.log("son say");    }}Son.extends(Father);var son = new Son();son.say();var Daughter = function() {};Daughter.prototype = {    say: function() {        this.super(arguments);        console.log("daughter say");    }}Daughter.extends(Father);var daughter= new Daughter();daughter.say();

/************* 打印结果 ***************/

person sayfather sayson sayperson sayfather saydaughter say

多态主要是在方法里面通过调用this.super(arguments)就会自动向上调用父类的同名方法。以上便是本次的js代码库分享,希望大家多多指点、多多评论,也希望我以后能给大家带来更多有用的库方法或者类。欢迎转载,原文出处

转载于:https://my.oschina.net/u/259577/blog/753986

你可能感兴趣的文章
智能家居形态逐步演进 机会与挑战并存
查看>>
《Linux指令从入门到精通》——4.4 Linux下的文本编辑指令
查看>>
淘富成真,硬件智能—— 硬件创新一站赋能平台
查看>>
网友神总结:我们继续用 XP 的十大理由
查看>>
2014年8月份国内主浏览器市场份额排行榜
查看>>
《Storm实时数据处理》一导读
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.2 recvfrom和sendto函数
查看>>
《数据结构与抽象:Java语言描述(原书第4版)》一第2章
查看>>
初学者指南:为开源做贡献
查看>>
OVM 免费虚拟化软件迭代时间调整,提高产品稳定性!
查看>>
《Windows Server 2012 Hyper-V虚拟化管理实践》——2.3 Hyper-V角色安装后的状态
查看>>
《电子元器件的可靠性》——3.7节电子元器件失效率鉴定试验
查看>>
SYNPROXY:廉价的抗 DoS 攻击方案
查看>>
《计算机系统:系统架构与操作系统的高度集成》——2.5 高级数据抽象
查看>>
Fit项目分页组件的编写
查看>>
国产操作系统思普将起诉微软涉嫌“商业诋毁”
查看>>
《Android游戏编程入门经典》——4.6节问与答
查看>>
TouchVG 支持 CocoaPods 了!
查看>>
如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
查看>>
《Python机器学习——预测分析核心算法》——2.3 对“岩石vs.水雷”数据集属性的可视化展示...
查看>>