javascript动态原型方法的多继承实现

<script type="text/javascript">
function MultiExtend(subClass,superClass){
//含有三个以上参数,表明要继承的具体方法
if(arguments[2]){
for(var i=2,len=arguments.length;i<len;i++){
subClass.prototype[arguments[i]] = superClass.prototype[arguments[i]];
}
}else{
for(methodName in superClass.prototype){
if(!subClass.prototype[methodName]){
subClass.prototype[methodName] = superClass.prototype[methodName];
}
}
}
}


function SuperA(){
if (typeof SuperA._initialized == "undefined") {
SuperA.prototype.HelloA = function(){
alert('HelloA');
}
SuperA._initialized = true;
}
}


function SuperB(){
if (typeof SuperB._initialized == "undefined") {
SuperB.prototype.HelloB = function(){
alert('HelloB');
}
SuperB._initialized = true;
}
}


function SuperC(){
if (typeof SuperC._initialized == "undefined") {
//这样如果没初始化过父类就初始化一次
if (typeof SuperA._initialized == "undefined") SuperA.call(this);
if (typeof SuperB._initialized == "undefined") SuperB.call(this);
//可以实现多继承
MultiExtend(SuperC,SuperA);
MultiExtend(SuperC,SuperB);
SuperC.prototype.HelloC = function(){
alert('HelloC');
}
SuperC._initialized = true;
}
}
var sc = new SuperC();
sc.HelloA();
sc.HelloB();
sc.HelloC();

</script>

一、使用动态原型方法创建类的好处:

1.利用prototype创建方法,可以确保方法只实现一次,减少内存占用

2.可以使用在类内部定义的私有变量,如果使用原型模式创建则只能将私有变量公开

二、使用MultiExtend方法可以实现对多个类的继承,主要用于实现类似c#语言一样实现多个接口继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值