面向對象篇(四)
阿新 • • 發佈:2018-01-29
() str 構造函數 function pro 兩個 proto creat ron
這兩個函數的比較之所以不相等,就是因為雖然值相等,但是引用地址不相等,那麽這也就意味著,同樣的一個方法,要在內存中存放兩份,現在是兩個如果是100個這樣的方法呢,就會大大的消耗內存,那麽怎麽解決這種問題呢,這就要說到js中一個非常重要的概念------原型,即prototype,原型就可以解決這種問題,不管多少,內存中都存在一份,我們來看代碼怎麽寫
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,這是因為,方法也是對象,而對象之間的比較不僅僅是值相等,而且引用地址也要相同,
function CreatePerson(name){ this.name = name; } CreatePerson.prototype.showName = function(){ alert(this.name); } varp1 =new CreatePerson(‘張三‘); p1.showName(); //張三 var p2 =new CreatePerson(‘李四‘); p2.showName(); //李四 console.log(p1.showName == p1.showName); //true;
我們看到原型prototype是掛載在構造函數下面的,把方法再掛載到原型下面,我們可以看到,這個時候p1.showName和p2.showName就已經相等了,返回了true,
這樣我們就寫出了一個完整的面向對象的程序。
面向對象篇(四)