Atitit.实现继承的原理and方法java javascript .net c# php ...

Atitit.实现继承的原理and方法java javascript .net c# php ...

 

 

1. 实现继承的问题


JavaScript中要实现继承,其实就是实现三层含义:
1、子类的实例可以共享父类的方法;
2、子类可以覆盖父类的方法或者扩展新的方法;
3、子类和父类都是子类实例的类型

要解决两个问题:1.如何拷贝基类方法?2.属性如何继承? 

 


JavaScript中,并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,以下是关于实现继承的几种方法的总结:
1、构造继承法
2、原型继承法
3、实例继承法
4、拷贝继承法

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

 

2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象

1.对于问题1,一般采用prototype原型方式,通过冒充对象。

 

 /*更改Member的prototype属性,以实现继承*/

 

09

     Member.prototype=new User();

 

2.拷贝基类方法代码

1

Member.prototype=new User();

  此行代码的含义是new 一个User对象,将此引用传递给Member的原型,这样完成了基类方法的拷贝工作。(备注:此处代码一定要先执行,然后再添加新的方法)。

 

3. 2.属性如何继承?

 

对于问题2,一般采用调用基类构造函数 

 

 /*初始化基类参数*/

 

06

         User.call(this,userid,uname,uage,uscore);

1.调用基类构造函数代码

1

User.call(this,userid,uname,uage,uscore);

此行代码的含义是执行User类的构造函数,并且将Member的this指针域传递给User类,此时User类运行构造函数时,this指向的是Member对象。

 

 

 

4. 几种继承方式的比较 
  

From JavaScript中继承的实现方法 - xieex - 博客园.htm

比较项

构造继承

原型继承

实例继承

拷贝继承

静态属性继承

N

Y

Y

Y

内置(核心)对象继承

N

部分

Y

Y

多参多重继承

Y

N

Y

N

执行效率

多继承

Y

N

N

Y

instanceof

false

true

false

false

 

 

5. 常用的apply ,call方法

每种方法都有其适用环境,比如,如果父类带有有参构造函数:这种情况下,prototype就不适用了,可选用apply或call;

 

 在apply和call中,又该如何取舍呢?在OO的继承中,子类继承于父类,那么它应该也是父类的类型。即,ChildClassByCall、ChildClassByApply应该也是ParentClass类型,但我们用"instanceof"检测一下就会发现,通过apply继承的子类,并非ParentClass类型。所以,我们建议用call + prototype 来模拟实现继承。据说,Google Map API 的继承就是使用这种方式哟。

apply 实现

参考::JavaScript继承的模拟实现 - 牦牛 - 博客园.htm

6. 参考

javascript实现类、继承、多态(原创) _ 耕书录.htm

JavaScript中继承的实现方法 - xieex - 博客园.htm

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。