用 Object.create实现类式继承

来源:互联网 发布:大数据经济学 编辑:程序博客网 时间:2024/06/03 07:36

下面的例子演示了如何使用Object.create()来实现类式继承。这是一个所有版本JavaScript都支持的单继承。

// Shape - superclassfunction Shape() {  this.x = 0;  this.y = 0;}// superclass methodShape.prototype.move = function(x, y) {  this.x += x;  this.y += y;  console.info('Shape moved.');};// Rectangle - subclassfunction Rectangle() {  Shape.call(this); // call super constructor.}// subclass extends superclassRectangle.prototype = Object.create(Shape.prototype);Rectangle.prototype.constructor = Rectangle;var rect = new Rectangle();console.log('Is rect an instance of Rectangle?',  rect instanceof Rectangle); // trueconsole.log('Is rect an instance of Shape?',  rect instanceof Shape); // truerect.move(1, 1); // Outputs, 'Shape moved.'

如果你希望能继承到多个对象,则可以使用混入的方式。

function MyClass() {     SuperClass.call(this);     OtherSuperClass.call(this);}// inherit one classMyClass.prototype = Object.create(SuperClass.prototype);// mixin anotherObject.assign(MyClass.prototype, OtherSuperClass.prototype);// re-assign constructorMyClass.prototype.constructor = MyClass;MyClass.prototype.myMethod = function() {     // do a thing};

Object.assign 会把  OtherSuperClass原型上的函数拷贝到 MyClass原型上,使 MyClass 的所有实例都可用 OtherSuperClass 的方法。Object.assign 是在 ES2015 引入的,且可用 polyfilled。要支持旧浏览器的话,可用使用 jQuery.extend() 或者 _.assign()。