什么是原型:
原型:每一個對象都與另一個對象相關聯,那個關聯的對象就稱為原型。
例如:函數Person有一個屬性prototype,指向一個對象,對於普通函數來說沒多意義,對於構造函數就有作用了,當使用new操作符時,會把Person.prototype(原型對象)賦值給實例的__proto__(原型實例)屬性。
JS有一個原型查找機制,把原來定義在實例上的方法,放到原型對象上去,通過構造函數的new操作,會把原型對象賦值給實例的__proto__屬性,那么當使用返回的實例去調用某一個方法的時候,如果實例本身上沒有,就去自動去實例的__proto__上去查找,這樣達到方法的復用,減少內存開銷。
原型鏈:
原型鏈:每一個對象,都有一個原型對象與之關聯,這個原型對象它也是一個普通對象,這個普通對象也有自己的原型對象,這樣層層遞進,就形成了一個鏈條,這個鏈條就是原型鏈。通過原型鏈可以實現JS的繼承,把父類的原型對象賦值給子類的原型,這樣子類實例就可以訪問父類原型上的方法了。
Person.prototype.constructor == Person
Person.prototype.__proto__.constructor == Object
Person.prototype.__proto__ == Object.prototype
Object.prototype.__proto__ == null