//练习js继承(组合继承:原型继承和构造函数继承的组合)function Polygon(length, area) { this.length = length; this.area = area;}Polygon.prototype = { constructor: Polygon, getLength: function () { console.log(this.length);console.log(" Polygon--getLength()!"); }, getArea: function () { console.log(this.area); }, sayHello: function () { console.log("Hi,I'm Polygon!");}}function Triangle(length, area) { //继承属性 Polygon.call(this, length, area);//在子类对象上调用父类构造函数 //添加新属性 //this.a=a;}//继承方法Triangle.prototype = new Polygon();//注意:通过原型链实现继承时,不能使用对象字面量创建原型的方法,会导致重写原型链/*Triangle.prototype = { constructor: Triangle, getLength: function () { console.log("Triangle length is " + this.length); }, getArea: function () { console.log("Triangle area is " + this.area); }}*/Triangle.prototype.constructor = Triangle;//设置constructor属性//重写父类方法Triangle.prototype.getLength = function () { //Polygon.prototype.getLength.call(this); console.log("Triangle length is " + this.length);};Triangle.prototype.getArea = function () { console.log("Triangle area is " + this.area);};//添加新方法Triangle.prototype.sayTriangle = function () { console.log("Hi,I'm Triangle!"); };var polygon1 = new Polygon(1, 2);polygon1.getLength();polygon1.getArea();var triangle1 = new Triangle(12, 16);//调用子类重写的方法triangle1.getLength();triangle1.getArea();//调用子类的新方法triangle1.sayTriangle();//调用父类未被重写的方法triangle1.sayHello();//调用父类被重写的方法Polygon.prototype.getLength.call(triangle1);
console打印信息:
1
Polygon--getLength()!2Triangle length is 12Triangle area is 16Hi,I'm Triangle!Hi,I'm Polygon!12Polygon--getLength()!