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、通过原型继承,所有属性都将成为共享属性。如果使用同一个子类实现两个实例,则会发现所有实例都共享所有属性。

三.因此,必须有一个混合继承,它保持属性私有,并允许子类访问父类的父链的方法。

你可以自己试一下。当对象冒充继承,子类不能访问父类的原型链的方法。原型链的所有实例继承子类共享所有父类属性。