参考阮一峰的文章:
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 // truerect instanceof Shape // truerect.move(1, 1) // 'Shape moved.'
上面代码表示,构造函数的继承分成两部分,一部分是子类调用父类的构造方法,另一部分是子类的原型指向父类的原型。
上面代码中,子类是整体继承父类。有时,只需要单个方法的继承,这时可以采用下面的写法。
ClassB.prototype.print = function() { ClassA.prototype.print.call(this); // some code}
上面代码中,子类B
的print
方法先调用父类A
的print
方法,再部署自己的代码。这就等于继承了父类A
的print
方法。