如果一个对象函数既有子类又有父类还有原型方法,那么在这么多的继承关系中,关于对象的继承顺序是怎样的呢?下面就来说一下JavaScript中的对象继承顺序。
1、子类,子类的原型方法都没有相关属性或方法而父类有这个属性或方法
<Script>
function fun1(name) {
this.name = name;
}
function fun2() {
window.fun1.apply(this,["阿斯顿马丁"]);
}
var car = new fun2();
alert(car.name);
</Script>
运行结果:
2、此种情况为在子类,子类的原型方法和父类,父类得到原型方法中都没有想要的属性或方法,那么就会继续向上一 级寻找根对象的原型方法,说白了就是孩子中找不到找他的 父亲,如果父亲也找不到找他的爷爷。
<Script>
Object.prototype.play = function() {
alert("我能跑");
}
function fun1() {
}
function fun2() {
}
fun2.prototype = new fun1();
var car = new fun2();
alert(car.play);
</Script>
运行结果:
3、子类和父类包含的属性相同那么在访问这一属性时会先访问子类的。
<Script>
function fun1() {
this.name = "兰博基尼";
}
function fun2() {
this.name = "法拉利";
}
fun2.prototype = new fun1();
var car = new fun2();
alert(car.name);
</Script>
运行结果:
4、此种情况为子类没有想要的属性或方法但是子类的原型方法和父类有这个属性,那么会优先访问子类的原型方法中 的属性。
<Script>
function fun1() {
this.name = "兰博基尼";
}
function fun2() {
}
fun2.prototype = new fun1();
fun2.prototype.name = "法拉利";
var car = new fun2();
alert(car.name);
</Script>
运行结果:
5、此种情况为子类,子类的原型方法,和父类都没有想要的属性或方法,但是父类的原形方法和根对象有这个属性或 方法,所以会优先访问父类的原型方法。
<Script>
Object.prototype.name = "兰博基尼";
function fun1() {
}
function fun2() {
}
fun1.prototype.name = "法拉利";
fun2.prototype = new fun1();
var car = new fun2();
alert(car.name);
</Script>
运行结果:
综上所述,JavaScript中对象的继承顺序为: 子类 --> 子类的原型方法 --> 父类 --> 父类的原型方法 --> 根对象的原型方法。