JS原型對象通俗"唱法"


書上對於原型對象的說法給我整的眼花繚亂,完全不知道它在說什么,查了好多資料,終於有了些理解,下面我以通俗的大白話說說我對原型對象的理解.

 

1.關於原型對象的重要知識點

         首先要知道一個很重要的知識點,一句話:所有對象都有原型對象.

 

2. 對比其他語言的理解

         原型對象,就是其它語言中的類中的靜態屬性和靜態方法,總是是靜態-static就對了.原理是: 內存中只有一份.

 

3. 在內存中的形象圖:

         首先,在產生js對象之前,我們需要創造一個構造函數(這都不知道,那就不要往下看了),如下:

function Person(name_, age_) {
         this.name = name_;
         this.age = age_;
}

下面,我們就要new 對象了,這里,我們new三個(Person)對象,"張三" "李雷" "韓梅梅",他們來自同一個構造函數Person:

內存中就這樣了,每個對象,都有自己的 name, age 內存.這里new了多少個對象,就要開辟多少塊name, age內存.

 

看到這,應該還是比較好理解的. 下面我們添加一條屬性.location屬性,如下:

function Person(name_, age_) {

this.name = name_;

this.age = age_;

this.location = "地球";

}

這時候 我們在new這三個人. 內存情況如下:

這里我們看,三個對象都有一個"地球"的內存空間.  這里你要動動大腦了, 三個人都有地球的內存,我們是不是可以這樣呢?

你看這樣好不好呢?  這樣只需要一個地球,大家都可以用了.   看到這,好吧,公用的那個空間如果是個對象的話,就是所謂的原型對象了.餓?就這樣?

是的,就這樣.

 

原型對象,最重要的作用就是把常量和方法獨立到自身里.   供給其它 "自己的對象" 使用. 最后如圖:

 

 

4. 從代碼的層次上介紹原型對象.

上圖是內存中的對象,我們現在從代碼的從面操作.

 

function Person(name_, age_) {

this.name = name_;

this.age = age_;

this.location = "地球";

}

//  三個具體的對象

var zhangsan = new Person("zhangsan", 21);

var lilei = new Person("lilei", 21);

var hanmeimei = new Person("hanmeimei", 21);

 

// 他們的原型對象是

Person.prototype.location = "地球";

Person.prototype.killPerson = function() {

                                               return "殺人";

                                       };

 

這里有一個問題,我們知道原型對象,可是我們怎么訪問到原型對象里的屬性呢.  就是我們如何獲取到location ,和用 killPerson方法呢?

請看:

         alert(zhangsan.location);

         alert(zhangsan.killPerson());

 

這樣就可以訪問到了,不過前提是,你的對象屬性里面,沒有定義location和killPerson.不然會把原對象的覆蓋掉.   這里面涉及到原型問題即,

在zhangsan.location的時候,首先,我們檢查zhangsan對象本身,從圖中我們知道,張三有 name, age 和prototype指針屬性.  並沒有location,找不到以后,它會繼續搜索原對象里面,看能否找到location屬性,如果有,就會調用原對象的屬性.

 

所以alert(zhangsan.location) 會輸出   "地球"

alert(zhangsan.killPerson() ) 會輸出   "殺人"

 

 

 

以上是我個人對原型對象的理解,希望對大家有幫助.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM