带你理解JavaScript的几种原型继承方法

其实JavaScript的原型最好的用法就是运用在面向对象编程的继承中,今天就来给你们讲一下,几种经常使用的原型继承运用方法。编程

原型继承

原型继承:每个构造函数都有prototype原型属性,经过构造函数建立出来的对象都继承自该原型属性。因此能够经过更改构造函数的原型属性来实现继承。浏览器

在JavaScript中,继承的方式有多种,能够一个对象继承另外一个对象,也能够经过原型继承的方式进行继承。函数

接下来给你们演示讲解一下几种继承方式:prototype

1.简单混入继承3d

直接遍历一个对象,将全部的属性和方法加到另外一对象上。调试

缺点:只能一个对象继承自另外一个对象,代码复用过低了。

2.混入式原型继承cdn

混入式原型继承其实与上面的方法相似,只不过是将遍历的对象添加到构造函数的原型上。对象

面向对象思想封装一个原型继承

咱们能够利用面向对象的思想,将面向过程进行封装。blog

3.替换式原型继承

替换式原型继承,在上面已经举过例子了,其实就是将一个构造函数的原型对象替换成另外一个对象。继承

以前咱们就说过,这样作会产生一个问题,就是替换的对象会从新开辟一个新的空间。

替换式原型继承时的bug

替换原型对象的方式会致使原型的constructor的丢失,constructor属性是默认原型对象指向构造函数的,就算是替换了默认原型对象,这个属性依旧是默认原型对象指向构造函数的,因此新的原型对象是没有这个属性的。

解决方法:手动关联一个constructor

4.Object.create()方法实现原型继承

当咱们想把对象1做为对象2的原型的时候,就能够实现对象2继承对象1。前面咱们了解了一个属性:proto,实例出来的对象能够经过这个属性访问到它的原型,可是这个属性只适合开发调试时使用,并不能直接去替换原型对象。

因此这里介绍一个新的方法:Object.create()。

语法:var obj1 = Object.create(原型对象);

示例代码:让空对象obj1继承对象obj的属性和方法

兼容性:因为这个属性是ECMAScript5的时候提出来的,因此存在兼容性问题。

利用浏览器的能力检测,若是存在Object.create则使用,若是不存在的话,就建立构造函数来实现原型继承。

相关文章
相关标签/搜索