javascript-js 的prototype原型理解講解

來源:互聯網
上載者:User

標籤:精通   板磚   一個   類的屬性   function   第一個   簡單的   代碼   設定   

起初接觸到這個prototype我是拒絕的,我還是花了一部分時間來理解這個東西,算不上精通,有什麼問題回複在下面

畢竟我是板磚挨慣了(滑稽);

在我理解看來,prototype不外乎就兩個基礎的作用:
1.動態添加類的屬性和方法
2.複製原類的內容

我們先來看第一個:
首先來定義一個簡單的Person類;

var Person = function(name,age){
//指定該類的屬性為參數值
this.name = name;
this.age = age;
//為該類指定一個talk方法
this.talk = function(){
alert("talk");
};
};

下面我們來產生Person 的執行個體

var zhangsan = new Person("zhangsan",19);
var lisi = new Person("lisi",19);
1
2
這樣我們產生了兩個Person 的執行個體,zhangsan 和lisi ,原先Person裡有個方法talk,而我們產生執行個體的時候,該talk會被再次產生一遍,因此這是極其不好的,因為假如我們要產生100個Person 的執行個體,該talk()就會被建立100次,而這很有可能導致記憶體溢出。那有沒有辦法只建立一次talk()呢,答案是有的!就是用prototype!

先來看一段代碼:

//照樣是定義一個Person的類
var Person = function(name,age){
//指定該類的屬性為參數值
this.name = name;
this.age = age;
//我們這裡不再為Person設定talk方法
};
};

再次來產生Person 的執行個體

var zhangsan = new Person("zhangsan",19);
var lisi = new Person("lisi",19);

這裡建立完畢後,我們得知,zhangsan和lisi都沒有talk的方法,我們現在用prototype給他們加上

Person.prototype.talk = function(){
alert("talk");
};

此時,Person所有的執行個體都擁有了這個方法

zhangsan.talk();//"talk"
lisi,talk();//"talk"

既然第一種用處搞清楚了,現在來看第二種用處。
所謂第二種用處就是複製原類的內容。

//建立一個類Person2
var Person2 = function(name,age){};
Person2.prototype = new Person();

此時的Person裡的內容已經全部拷貝到Person2裡面了

javascript-js 的prototype原型理解講解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.