無論任何文章,一遍不懂,兩遍,兩遍不懂,繼續看,技術在不斷提高,直到有一天你忽然發現就這麼明白了。。。。。。javascript
原型這一塊一直想總結一下,值到今天才動筆java
原型函數
定義:prototype
Js全部的函數都有一個prototype屬性,這個屬性引用了一個對象,即原型對象,也簡稱原型。咱們講的更可能是構造函數的原型,可是也不可否定普通函數也有原型。code
javascript中一切皆對象,每一個對象都有一個 __proto__的屬性;函數的__proto__對應「function(){}」對像。對象
函數還有prototype屬性。blog
一個實例的__proto__===構造函數的prototype。繼承
做用:ip
原型用於對象添加屬性及方法原型鏈
構造函數 原型等之間的關係:
function P(){};
var p=new P();
當一個構造函數P建立時,會擁有一個prototype屬性,當new一個實例p時,其實例p的__proto__屬性對應構造函數P的prototype屬性;(P.prototype===p.__proto__)
實例p的__proto__.constructor對應構造函數P;( p.__proto__.constructor===P(){} )
從而p.__proto__.constructor.prototype指向P.prototype(p.__proto__.constructor.prototype===P.prototype)
p.constructor===p.__proto__.constructor
p.constructor.prototype與的內部_proto_是兩碼事,實例化對象時用的是_proto_,實例p是沒有prototype屬性的,可是有內部的__proto__,經過__proto__來取得原型鏈上的原型屬性和原型方法
原型鏈
定義:
javascript中一切皆對象,每一個對象有__proto__屬性,而__proto__屬性指向其實例化它的構造函數原型............因此會造成一條__proto__連起來的鏈條
原型鏈做用:
實現對象屬性與方法的繼承
ES6 的Class 能夠經過extends
關鍵字實現繼承,更加方便
若有不對的地方,請多多指教! ——RLflash