javascript高级程序设计读书笔记(六)

2016-09-08  本文已影响15人  youngiyang_打码少年

继承

NO.1 原型链

基本思想是让一个引用类型继承另一个引用类型的属性和方法。所以原型链是用来实现继承的主要方法。

继承的实现主要原理,其实本质方法是重写原型对象。例如:
假设要B继承A的所有属性和方法。
首先定义一个构造函数A和构造函数B
然后:
B.prototype = new A()
var aa = new B()
这样一来aa就继承了对象A的所有方法和属性。
注意:所有的函数默认原型都是Object实例,所以构造函数A也继承了Object的所有方法和属性。

NO.2 重写超类型中的方法:


值得注意的是,在通过原型链实现继承时,不能使用对象字面量创建原型方法。因为这样写就会重写原型链。

以上的例子存在一个问题就是:通过以上函数创建的对象属性都是共享的,且都是原型对象中的属性,这样一来, 只要有一个对象实例改变了属性,其他的对象实例都会发生改变。所以需要用到借用构造函数方式:


NO.3 组合继承

简单来说,就是用构造函数的方式继承所有属性,然后方法自己通过原型对象来创建。代码如下:



NO.4 原型式继承

通俗来讲,就是借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。如下:

function object(o){
    function F(){}
    F.prototype = o ;
    return new F();
}
```
主要原理也是重写构造函数的原型。在函数内部,临时新建一个构造函数,然后重写构造函数的原型(将传入的对象赋值进去),然后返回这个构造函数的新实例。

![](https://img.haomeiwen.com/i627120/9289fb2be2dea1d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Object.create(),在传入一个参数的情况下,和object()方法的行为相同。

在传入2个参数的情况下,后面的那个参数代表属性,如果和原型对象属性重名,会覆盖原型对象里的属性

####NO.6 寄生式继承
![](https://img.haomeiwen.com/i627120/86a8068a2c900ecb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://img.haomeiwen.com/i627120/576269860af3deba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


####NO.7寄生组合式继承
寄生组合式继承基本模式如下:
![](https://img.haomeiwen.com/i627120/18ce4b2740724ab2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
实例:
![](https://img.haomeiwen.com/i627120/02d26387cf321986.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
上一篇下一篇

猜你喜欢

热点阅读