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

时间:2024-07-25 12:35:44

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

1. 实现继承的问题 1

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

3. 2.属性如何继承? 2

4. 几种继承方式的比较    2

5. 常用的apply ,call方法 3

6. 参考 3

1. 实现继承的问题

JavaScript中要实现继承,其实就是实现三层含义:

1、子类的实例可以共享父类的方法;

2、子类可以覆盖父类的方法或者扩展新的方法;

3、子类和父类都是子类实例的“类型”。

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

JavaScript中,并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,以下是关于实现继承的几种方法的总结:

1、构造继承法

2、原型继承法

3、实例继承法

4、拷贝继承法

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.****.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

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