Javascript的继承(二)
毫无疑问,这种方法更容易理解和调用子类中父类的构造函数。此外,这种方法的最大优点之一是构造继承可以实现多重继承并检查代码:复制代码代码如下所示:
函数A()
{ }
函数B()
{ }
函数C()
{
这个,爸爸;
This.father();
删除this.father;
这个,爸爸= B;
This.father();
删除this.father;
}
但这种方式也有缺点。
熟悉面向对象,我们看这样一个C #代码:
复制代码代码如下所示:
classprogram
{
staticvoid主要(字符串{} args)
{
B =新手();
布尔变量=(typeof(a)IsInstanceOfType(b));
console.writeline(临时);
}
}
A
{
公开的A()
{
}
}
ClassB:一个
{
公共b()
{
}
}
结果如何当然,B是A的一个例子:
但是,我们对上面使用继承结构的Javascript代码做这个测试:
复制代码代码如下所示:
函数A()
{ }
函数B()
{ }
函数C()
{
这个,爸爸;
This.father();
删除this.father;
这个,爸爸= B;
This.father();
删除this.father;
}
新的C();
警报(C是一个);
但结果并不是我们所想的:
事实上,很容易解释结构继承是通过调用父类构造方法复制的父类的属性来完成的,而另一个搜索没有完成,所以很多数据不调用这种继承方式继承。
看到缺点和记住优点:支持多重继承。
当我们看C #继承,我们发现从这个传承最典型的两种差异:C #不支持多重继承,而缺点的构造继承我上面提到的,一个新的传承方式是创造,我们成为原型继承。
当您看到名称时,大致可以理解原型继承是通过使用原型的特性继承的,这是Javascript中最流行的继承方式之一,如果您不理解原型,请注意我的另一篇文章:原型。
让我们先看看代码,在这里,我在Javascript王的返回部分上画一段代码:
复制代码代码如下所示:
函数点(维数)
{
这个维度=维度;
测试=函数(){
警报();
}
}
功能point2d(x,y)
{
这个;
这个,y = y;
}
point2d。原型=新点(2);
var p =新point2d(3,4);
P. Test();
测试通过。这表明point2d继承了父类的方法,然后看情况。
警报(P是点);
成功uff01ok,再来分析原型继承:
原型继承的优点我不多说,结构简单,容易理解,可以举例,但他的缺点也同样显著。你还记得我最后一个关于动物、人、女孩的例子吗我们使用原型继承来实现这一点:
复制代码代码如下所示:
功能动物()
{
这个函数=(){警报(我可以运行);};
}
功能人(姓名)
{
这个函数。
}
原型=新动物();
功能女孩(姓名,年龄)
{
这个年龄=年龄;
这一步。引入函数=(警报);
}
女孩,原型=新人();
我们看看代码行,我大胆的红色部分,人是这个女孩的原型,所以当我们初始化人应通过名称参数,但每个女孩的名字是不一样的,所以不使用一个原型继承的场合:你不能确定继承原型初始化什么参数的父对象的阶段。场合:很简单,每个类只能有一个原型,即原型继承不能用于多重继承,这是一件好事和坏事。因为:
在面向对象的语言如java和c #,多重继承,不支持多重继承,并被认为是面向对象的不一致。
无法实现多个接口!
好了,这是今天写的。总之,原型继承解决了结构继承中的一些问题,并引入了一些新的问题,一般来说,原型继承是最广泛使用的继承方式,是Javascript语法中继承的真正含义!