参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4
function Shape() {
this.x = 0;
this.y = 0;
} Shape.prototype.move = function (x, y) {
this.x += x;
this.y += y;
console.info('Shape moved.');
}; function Rectangle() {
Shape.call(this); // 调用父类构造函数
}
// 另一种写法
function Rectangle() {
this.base = Shape;
this.base();
} // 子类继承父类的方法
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle; var rect = new Rectangle(); rect instanceof Rectangle // true
rect instanceof Shape // true rect.move(1, 1) // 'Shape moved.'
上面代码表示,构造函数的继承分成两部分,一部分是子类调用父类的构造方法,另一部分是子类的原型指向父类的原型。
上面代码中,子类是整体继承父类。有时,只需要单个方法的继承,这时可以采用下面的写法。
ClassB.prototype.print = function() {
ClassA.prototype.print.call(this);
// some code
}
上面代码中,子类B
的print
方法先调用父类A
的print
方法,再部署自己的代码。这就等于继承了父类A
的print
方法。