繼承
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();
}
```
主要原理也是重寫構造函數的原型。在函數內部,臨時新建一個構造函數,然后重寫構造函數的原型(將傳入的對象賦值進去),然后返回這個構造函數的新實例。

Object.create(),在傳入一個參數的情況下,和object()方法的行為相同。
在傳入2個參數的情況下,后面的那個參數代表屬性,如果和原型對象屬性重名,會覆蓋原型對象里的屬性
####NO.6 寄生式繼承


####NO.7寄生組合式繼承
寄生組合式繼承基本模式如下:

實例:
