JavaScript六种继承方式?

JavaScript013

JavaScript六种继承方式?,第1张

继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,不支持接口继承,实现继承主要依靠原型链来实现的。

原型链

首先得要明白什么是原型链,昆明北大青鸟http://www.kmbdqn.cn/建议可以在一篇文章看懂proto和prototype的关系及区别中讲得非常详细

原型链继承基本思想就是让一个原型对象指向另一个类型的实例

添加方法

在给SubType原型添加方法的时候,如果,父类上也有同样的名字,SubType将会覆盖这个方法,达到重新的目的。但是这个方法依然存在于父类中。

记住不能以字面量的形式添加,因为,上面说过通过实例继承本质上就是重写,再使用字面量形式,又是一次重写了,但这次重写没有跟父类有任何关联,所以就会导致原型链截断。

问题

单纯的使用原型链继承,主要问题来自包含引用类型值的原型。

借用构造函数

此方法为了解决原型中包含引用类型值所带来的问题。

这种方法的思想就是在子类构造函数的内部调用父类构造函数,可以借助apply()和call()方法来改变对象的执行上下文

传递参数

借助构造函数还有一个优势就是可以传递参数

一,先来说说javascript的继承机制的几种方式:1,原型链继承:优点:从instanceof关键字来看,实例既是父类的实例,又是子类的实例,看起来似乎是最纯粹的继承。缺点:子类区别于父类的属性和方法,必须在Sub.prototype = new Base()这样的语句之后分别执行,无法被包装到Sub这个构造器里面去。例如:Sub.prototype.name = “sub”;无法实现多重继承。2,构造继承:优点:可以实现多重继承,可以把子类特有的属性设置放在构造器内部。缺点:使用instanceof发现,对象不是父类的实例。3,实例继承:优点:是父类的对象,并且使用new构造对象和不使用new构造对象,都可以获得相同的效果。缺点:生成的对象实质仅仅是父类的实例,并非子类的对象;不支持多继承。4,拷贝继承:优点:支持多继承。缺点:效率较低;无法获取父类不可枚举的方法。二,java继承机制:1,java里的类不能多重继承,如果一个类一旦继承了它的父类,那么它就别想再继承别的类。一个儿子只能有一个老爸,原本设计是没错的。可是在实际应用中,就会出现各种问题。2,java里有更好的接口,接口从本质上来说可以更好的代替继承。实现像C++里一样的宏定义的功能,把你想要的东西都抽象在接口里,让具体的类去实现这些功能。三,综上可以看出java不能多继承,javascript可以,但是javascript没有接口这一说话,也有局限性,各有千秋吧。

js中继承跟java中的继承不太一样,一般通过call()和apply()两种方式完成,js中的继承是以复制的形式完成的,复制一个父对象,而不像java中直接继承父对象,还有通过原型的方式完成继承,也有弊端,总之js中的继承只是形式上的对面向对象语言的一种模仿,本质上不是继承,但用起来效果是一样的

至于为什么要继承:通常在一般的项目里不需要,因为应用简单,但你要用纯js做一些复杂的工具或框架系统就要用到了,比如webgis、或者js框架如jquery、ext什么的,不然一个几千行代码的框架不用继承得写几万行,甚至还无法维护