1. 程式人生 > >面向對象篇(四)

面向對象篇(四)

() str 構造函數 function pro 兩個 proto creat ron

function CreatePerson(name){
   this.name = name;
   this.showName = function(){
        alert(this.name);
   }
}
var p1 =new CreatePerson(‘張三‘);   
p1.showName(); //張三 

var p2 =new CreatePerson(‘李四‘); 
p2.showName(); //李四

上面的代碼,看似沒有什麽問題,我們來看一個問題

console.log(p1.showName == p2.showName);       //false

看似同樣的一個方法,對比起來卻是false,這是因為,方法也是對象,而對象之間的比較不僅僅是值相等,而且引用地址也要相同,

這兩個函數的比較之所以不相等,就是因為雖然值相等,但是引用地址不相等,那麽這也就意味著,同樣的一個方法,要在內存中存放兩份,現在是兩個如果是100個這樣的方法呢,就會大大的消耗內存,那麽怎麽解決這種問題呢,這就要說到js中一個非常重要的概念------原型,即prototype,原型就可以解決這種問題,不管多少,內存中都存在一份,我們來看代碼怎麽寫

function CreatePerson(name){
   this.name = name;
}
CreatePerson.prototype.showName = function(){
    alert(this.name);
}
var
p1 =new CreatePerson(‘張三‘); p1.showName(); //張三 var p2 =new CreatePerson(‘李四‘); p2.showName(); //李四 console.log(p1.showName == p1.showName);  //true;

我們看到原型prototype是掛載在構造函數下面的,把方法再掛載到原型下面,我們可以看到,這個時候p1.showName和p2.showName就已經相等了,返回了true,

這樣我們就寫出了一個完整的面向對象的程序。

面向對象篇(四)