是明和其他功能一样,ECMAScript 实现继承的方式不止一种。这是因为 JavaScript 中的继承机制并不确规定的,而是通过模仿实现的。这意味着所有的继承细节并非完全由解释程序处理。
javascript继承方式有很多中,详情可已参见这里。
下面我介绍下运用最多的混合继承:
<script>
function ClassA(sColor) {
this.color = sColor;
this.age=1000;
}
ClassA.prototype.sayColor = function () {
alert(this.color);
};
ClassA.prototype.sayAge = function () {
alert(this.age);
};
//继承属性
function ClassB(sColor, sName) {
ClassA.call(this, sColor);
this.name = sName;
}
//继承方法
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function () {
alert(this.name);
};
var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor(); //输出 "blue"
objB.sayColor(); //输出 "red"
objB.sayAge(); //输出1000
objB.sayName(); //输出 "John"
</script>
对于混合继承,属性的继承使用call或者apply方法实现的,而对于方法是使用原型的方式继承。对于父类要输入的参数,对于子类也要在call方法中相对应,而且可以增加参数,可以参见上面的call方法,而对于父类中默认的参数,像age就默认继承。(我是这么理解的,轻拍。。。)