学习prototypejs中的继承实现机制(二):让$super更像java中的super关键字

本文探讨如何改进Prototype.js的Class#addMethods,以实现更接近Java中super关键字的功能。通过分析源码,文章展示了如何在子类方法中便捷地调用父类的同名和不同名方法,以及如何处理多个方法的调用。通过逐步改造代码,最终达到在Prototype.js中模拟Java的super调用方式。
摘要由CSDN通过智能技术生成

上一篇博客"Object.extend()、Class.create()、Class#addMethods()"中详细地介绍了prototypejs库中与继承有关的方法的用法,那篇文章的开篇也引出了我想要解决的一个问题:

是不是和java中的继承有点像,我们居然可以使用$super来调用父类中的方法。不过有些差别:java中可以使用super调用父类中的任何公开的方法,但是在prototypejs里面$super只是一个方法,不是父对象。我们先研究下,prototypejs是如何做到$super,后面再看我们能不能改造它,让$super更像java中的super关键字。

这篇博客,我们就来动动prototypejs库Class#addMethods源码,看看能不能实现我要的功能。先来看一段熟悉的代码,这个是$super的基本用法。后面我们用到的测试代码和这个差不多,所以一定要先熟悉下面这段代码。

var Base = Class.create({
	initialize:function(){
		this.logs = [];
	},
	showLog:function(tips){
		console.log("parent["+ tips+"],logs="+this.logs);
	},
	appendLog:function(msg){
		this.logs.push(msg);
	}
});

var Child = Class.create(Base,{
	initialize:function($super, id){
		$super(id);
		this.fatal = [];
	},
	
	showLog:function($super, tips){
		$super(tips);
		console.log("child["+ tips+"],fatal="+this.fatal);
	},
	appendLog:function($super,msg){
		if(msg.indexOf("fatal") != -1)
		{
			this.fatal.push(msg);
		}
		else
		{
			$super(msg);
		}
	}
});

var cobj = new Child("aty");
cobj.showLog("cas");
在OOP语言(如java)中,如果子类Child继承父类Base,那么编写某个子类方法的需求,无外乎下面几个:

1.子类方法需要调用父类中的个同名方法(通过super关键字来调用)。

2.子类方法需要调用父类中的不同名方法(通过super关键字来调用)。

3.子类方法需要调用子类自身的其他方法(通过this关键字来调用)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值