在進行說JS的原型之前,先說一個JS是基于什麼開發的:
(1)JS是基于對象開發的
(2)JS是是一種腳本語言,即隻要寫出來就可以進行立即編譯執行
(3)JS是基于原型繼承的,這點很重要,下面的知識都是基于此點才能進行說明
在說今天的重點“什麼是原型”之前,要先說兩個東西:
(一)什麼是原型屬性
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXwUFRPNTUU10dJpHZ0Q2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM2czMxADN1EzMycDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如上圖,建立一個函數function Person() {},打開浏覽器控制器,從螢幕可看到圖中,紅框中Object即是Person的原型屬性,簡稱原型,構造函數使用prototype來指向原型
(二)什麼是原型對象
如上圖,将上面的Person建立一個對象p,其中的Object即是對象p的原型對象,簡稱原型,執行個體對象使用__proto__來指向原型。
上面兩點需要牢記,不能混淆!!!原型對構造函數而言的全稱為原型屬性;原型對執行個體對象而言的全稱為原型對象;簡稱都為原型!下面是例圖:
使用構造函數.prototype或執行個體對象.__proto__都可以通路到原型,後一種使用方法是使用對象的動态特性對原型進行修改,但禁止用于代碼中,因為構造函數若建立出多個執行個體對象,其中一個執行個體對象對原型進行了修改,就會影響到其他對象。這樣就會造成很多的不确定性、維護困難。
執行個體對象.__proto__一般用于調試,構造函數.prototype一般用于代碼中
初級知識說完了,下一篇将将原型中級知識。
初級知識總結,上圖必須牢記,是核心知識:
(1)構造函數用prototype指向原型,全稱原型屬性
(2)執行個體對象用__proto__指向原型,全稱原型對象
(3)原型用constructor指向構造函數