構造函數就是一個普通的函數,建立方式和普通函數沒有區別,不一樣的是構造函數習慣上首字母大寫。另外就是調用方式的不一樣,普通函數是直接調用,而構造函數須要使用new關鍵字來調用。bash
function Person() {};
var person = new Person();
複製代碼
實例就是經過構造函數建立出來的對象。函數
每當定義一個函數數據類型(普通函數、類)時候,都會天生自帶一個prototype屬性,這個屬性指向函數的原型對象,而且這個屬性是一個對象數據類型的值。 spa
原型對象就至關於一個公共的區域,全部同一個類的實例均可以訪問到這個原型對象,咱們能夠將對象中共有的內容,統一設置到原型對象中。prototype
指從一個實例對象開始往上找,這個實例對象的__proto__屬性所指向的則是這個實例對象的原型對象,若是用person表示這個實例,則原型對象表示爲person.proto。同時,這個原型對象顧名思義也是一個對象,並且它也有上一級的原型對象,相對於上一級原型對象而言,它也是一個實例對象,那麼它也擁有__proto__屬性,它的__proto__屬性也指向它的原型對象,後面也以此類推,一直到Object.prototype這個原型爲止,Object.prototype爲原型鏈的末尾點。3d
Person是構造函數, Person.prototype 是原型對象, person是實例, 實例能夠經過_proto_找到原型對象。code
function A() {}
A.prototype.type = 'AAA'
function B() {}
B.prototype = new A()
b = new B()
console.log(b.__proto__.__proto__.type) //AAA
console.log(B.prototype.__proto__ == b.__proto__.__proto__) //true
console.log(A.prototype == b.__proto__.__proto__) //true
console.log(A.prototype == B.prototype.__proto__) //true
console.log(b.__proto__.__proto__.type == A.prototype.type) //true
複製代碼
若是感受對你有幫助,那就收藏❤❤吧!cdn