Javascript非参数和参数类继承问题求解方法
非参数类继承问题
首先看一个示例代码,实现从a继承:
复制代码代码如下所示:
函数A(){
}
a.prototype.a1 =函数(){ };
函数B(){
}
b.prototype =新一();
b.prototype.b1 =函数(){ };
新的b();
警报(b.constructor = =一个); / /真的
警报(b.constructor = = b); / /假
这个代码的主要问题是:
1。需要将A实例化为B的原型,然后执行a的构造函数。然而,在B被实例化之前,B和它的父类a的构造函数不应该按照面向对象规则执行。
2。改变B的原型,造成b.constructor不但是B A.
关于继承的问题
假设a和b有两个字符串参数S1和S2,则两个段字符串的总长度在a中计算,而b直接与S1和S2的参数直接调用。
复制代码代码如下所示:
函数A(S1,S2){
this.totallength = s1.length + s2.length;
}
a.prototype.a1 =函数(){
};
函数B(S1,S2){
}
b.prototype =新一();
b.prototype.b1 =函数(){
};
新的b( ab)
正如您所看到的,在这个代码中没有办法将S1和S2传递给a,并且有一个例外,因为A被实例化为B原型。
复制代码代码如下所示:
S1是未定义的
解决方案
S1和S2的范围仅在B中,并将它们传递给a,只能在函数的应用方法的帮助下,才能在b中操作。
复制代码代码如下所示:
函数B(S1,S2){
A.apply(这个参数);
(此为警戒。);
}
接下来的问题是如何添加一个方法的原型,这并不难,只是在a.prototype和复制的方法b.prototype.it重点注意的是,对于同一个名字的方法,它是自然类优先(超载),因此不能盖:
复制代码代码如下所示:
对于(var m a.prototype){
如果(!b.prototype {米})方法不能覆盖{ / /父类
b.prototype { } = { } a.prototype M M;
}
}
后记
考虑到如C #,java高级语言,和其他高级语言已经放弃了多重继承,本文只是一个单一的继承。在这篇文章中描述的继承法也将被作为jraiser的延伸,这就是后来的释放。