3种继承方法和Javascript代码示例
继承是实现面向对象编程的一个重要手段,虽然我们说我们不能过度使用,但我们使用组合而不是继承,但继承总是不可避免的,这里要讨论的是Javascript中的继承机制。事实上,Javascript中没有继承的概念,但我们可以通过一些方法来模仿它,这种继承实际上将一个对象复制到另一个对象的内部,您需要注意的是,所有本地和宿主类都不作为基类继承,主要是出于安全考虑。
Javascript中有大约三种类型的继承:1。对象冒充;2。原型继承;3的混合。两。
首先,对象冒充
事实上,对象冒充链接到这个关键词密切(所以重要的是要说这个关键词在Javascript中是多么重要:P)。使用此构造函数的属性和方法的评价,和构造函数也可以被看作是一个正常的功能,所以我们可以让我们的基类构造函数为子类的构造函数,然后调用这个函数的内部子类的子类,然后将得到的父类的属性和方法。
原理很简单,我们怎么做呢下面是代码示例,实际操作。
模拟对象的实现方法,其中最常用的方法为新的对象:
复制代码代码如下所示:
VaR ClassA =功能(name){
this.name =名称;
this.alertname =函数(){
警报(这个名字);
}
}
VaR B =功能(姓名,年龄){
this.myconstructor = A;
This.myConstructor(人名);
删除this.myconstructor;
this.age =年龄;
this.alertage =函数(){
警戒(这个年龄);
}
}
为了验证上面的方法是否正确,您可以亲自测试它,并在下面编写代码:
复制代码代码如下所示:
无功obja =新班('dk);
ObjA.alertName(); / / DK
无功objb =新的B('ds ',20);
ObjB.alertName(); / / DS
ObjB.alertAge(); / / 20
这就是所谓的对象和其他对象的模仿,假装有其他方式实现两。虽然它们的实现方式不同,它们的原理是相同的。
对象冒充实施方法两,通过调用方法:
复制代码代码如下所示:
VaR ClassA =功能(name){
this.name =名称;
this.alertname =函数(){
警报(这个名字);
}
}
VaR B =功能(姓名,年龄){
ClassA.call(这名字);
this.age =年龄;
this.alertage =函数(){
警戒(这个年龄);
}
}
通过代码,我们也可以看到,在第一个方法中,我们创建一个指向父类的函数指针,调用函数,然后删除指针。在这里,我们使用调用方法在这个对象下运行父类的构造函数,实现相同的目的。此外,应用方法与调用方法相对。
对象冒充实施方法三,使用方法的应用:
复制代码代码如下所示:
VaR ClassA =功能(name){
this.name =名称;
this.alertname =函数(){
警报(这个名字);
}
}
VaR B =功能(姓名,年龄){
ClassA.apply(这个新的数组(名字));
this.age =年龄;
this.alertage =函数(){
警戒(这个年龄);
}
}
事实上,您可以看到应用程序方法与调用方法非常相似,但是传输参数略有不同。
二、原型继承
我们应该对原型对象有所了解。原型对象上的所有属性和方法都将传递给类的所有实例。当我们将父类的所有属性和方法都带到子类的原型对象时,我们将实现继承。
子类希望获得父类的所有属性和方法。然后我们直接将父类的实例给子类的原型对象。那么我们的子类不等于获取父类的所有对象和方法。
代码示例服务器:
复制代码代码如下所示:
VaR ClassA =函数(){()
this.name = 'dk;
this.alertname =函数(){
警报(这个名字);
}
}
VaR B =功能(姓名,年龄){
this.name =名称;
this.age =年龄;
}
classb.prototype =新课堂();
classb.prototype.alertage =函数(){
警戒(这个年龄);
}
注意,这里父类的构造函数需要确保没有参数,因为即使您不能通过。在实现原型继承时有结构参数!
三,混合遗传
顾名思义,混合继承是前两种方法的混合使用。
复制代码代码如下所示:
VaR ClassA =功能(name){
this.name =名称;
}
classa.prototype.alertname =函数(){
警报(这个名字);
}
VaR B =功能(姓名,年龄){
ClassA.call(这名字);
this.age =年龄;
}
classb.prototype =新课堂();
classb.prototype.alertage =函数(){
警戒(这个年龄);
}
使用对象冒充传递参数的父类,并使用原型继承开展的公共方法的继承。
在三次中国接班结束时,下面是讨论这个问题的时候了。
你可能会困惑为什么有一个物体冒充,继承了原型,并作出更多的混合遗传。最重要的是这个问题。
1。如果你真的测试,你将从一个对象冒充找到继承,子类是不能访问父类的原型链的方法。
2、通过原型继承,所有属性都将成为共享属性。如果使用同一个子类实现两个实例,则会发现所有实例都共享所有属性。
三.因此,必须有一个混合继承,它保持属性私有,并允许子类访问父类的父链的方法。
你可以自己试一下。当对象冒充继承,子类不能访问父类的原型链的方法。原型链的所有实例继承子类共享所有父类属性。