標籤:精通 板磚 一個 類的屬性 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原型理解講解