JS中多继承

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

// Shape - 父类(superclass) 
function Shape() { 
this.x = 0; 
this.y = 0; 
}

// 父类的方法 
Shape.prototype.move = function(x, y) { 
this.x += x; 
this.y += y; 
console.info(‘Shape moved.’); 
};

// Rectangle - 子类(subclass) 
function Rectangle() { 
Shape.call(this); // call super constructor. 
}

// 子类续承父类 
Rectangle.prototype = Object.create(Shape.prototype); 
Rectangle.prototype.constructor = Rectangle;

var rect = new Rectangle();

console.log(‘Is rect an instance of Rectangle?’, 
rect instanceof Rectangle); // true 
console.log(‘Is rect an instance of Shape?’, 
rect instanceof Shape); // true 
rect.move(1, 1); // Outputs, ‘Shape moved.’ 
如果你希望能继承到多个对象,则可以使用混入的方式。

function MyClass() { 
SuperClass.call(this); 
OtherSuperClass.call(this); 
}

// 继承一个类 
MyClass.prototype = Object.create(SuperClass.prototype); 
// 混合其它 
Object.assign(MyClass.prototype, OtherSuperClass.prototype); 
// 重新指定constructor 
MyClass.prototype.constructor = MyClass;

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

猜你喜欢

转载自blog.csdn.net/weixin_36065510/article/details/79968285