標籤:
1、把方法寫在原型中比寫在建構函式中消耗的記憶體更小,因為在記憶體中一個類的原型只有一個,寫在原型中的行為可以被所有執行個體共用,執行個體化的時候並不會在執行個體的記憶體中再複製一份
而寫在類中的方法,執行個體化的時候會在每個執行個體中再複製一份,所以消耗的記憶體更高
所以沒有特殊原因,我們一般把屬性寫到類中,而行為寫到原型中
2、建構函式中定義的屬性和方法要比原型中定義的屬性和方法的優先順序高,如果定義了同名稱的屬性和方法,建構函式中的將會覆蓋原型中的
代碼如下:
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>無標題文檔</title></head><body><script type="text/javascript">//把方法寫在原型中比寫在建構函式中消耗的記憶體更小,因為在記憶體中一個類的原型只有一個,寫在原型中的行為可以被所有執行個體共用,執行個體化的時候並不會在執行個體的記憶體中再複製一份//而寫在類中的方法,執行個體化的時候會在每個執行個體中再複製一份,所以消耗的記憶體更高//所以沒有特殊原因,我們一般把屬性寫到類中,而行為寫到原型中function Abc(name){ this.name=name; //建構函式中定義的屬性和方法要比原型中定義的屬性和方法的優先順序高,如果定義了同名稱的屬性和方法,建構函式中的將會覆蓋原型中的,所以下面的x.sya()彈出的是“my name is xudeming”,如果把這句去掉,彈出的就是“my name is xx”; //方法的優先順序亦是如此 /*this.say=function(){ alert(1); }*/}Abc.prototype={ name:"xx", say:function(){ alert("my name is "+this.name); }}var x=new Abc("xudeming");x.say()</script></body></html>
轉載自:http://www.css119.com/archives/1446
javascript建構函式類和原型prototype定義的屬性和方法的區別