JavaScript物件導向程式設計理解!
對程式設計有了解的同學都知道,物件導向是一個非常難以理解的概念。下面小千給大家分享一下物件object的理解,本篇文章主要分享面對物件的封裝。當然現實生活中物件導向也挺難的,哈哈哈~
一,關於例項物件的原始模式
首先我們知道每個物體都是一個物件,舉例來說,“狗”作為一個物件,他有“種類”和“顏色”兩個屬性。
然後,我們需要建立兩個例項化物件
這也是最基礎的物件封裝,也就是把“種類”和“顏色”兩個屬性放在一個物件裡面。但是問題來了,這種寫法有兩個問題:一是如果要生成很多個例項化物件,就需要重複很多遍,很麻煩;二是他們與原型Dog結構很相似,但是實際上沒有建立直接的聯絡。
二,原始模式升級
重複的程式碼,我們可以寫一個函式來解決
接著再呼叫函式,生成例項化物件
這種方法可以解決生成多個例項化物件程式碼複雜的問題,但是dog1和dog2之間沒有產生關聯,也就是依然沒有體現出他們其實是原型物件Dog的例項。
三,建構函式
為了解決讓例項化物件需要從原型物件生成的問題,js提供了建構函式這樣一個概念。當然其實建構函式本質上也就是一個普通函式,只不過函式內部使用了this,為了區分於普通函式,我們一般對建構函式首字母大寫,具體程式碼如下:
有了這個建構函式,我們就可以生成例項化物件了,具體程式碼如下:
這裡我們可以看到關鍵字new , 也就是實際上Dog是一個物件,dog1和dog2是Dog這個物件的例項化物件;為了驗證這一點,js提供了一個屬性constructor,此屬性用於指向他們的建構函式
當然,js還有另一個運算子 instanceof,可以驗證原型物件與例項化物件之間的關係。
到建構函式這裡看似已經很完美了,但是,這裡存在一個很大的弊端,也就是記憶體浪費。舉例來說,我們現在給Dog物件新增一個不變的屬性和方法如下:
當然這裡生成例項化方法也還是一樣的,但是這裡會有一個很大的問題:也就是我們會發現age屬性和eat()方法明明是一模一樣的內容,但是由於每次生成例項化物件時,都會生成同樣的內容,多造成記憶體浪費。
console.log(dog1.eat == dog2.eat); // false
如果能讓age和eat()在記憶體中只生成一次,讓例項化物件指向同一個記憶體地址就更完美了。
四,prototype模式
js為每一個建構函式都提供了一個prototype屬性,讓他指向另一個物件,而這個物件的所有屬性和方法都會被建構函式的例項物件繼承。這也就意味著,只要我們把那些不變的屬性和方法定義在prototype物件上即可。
接著再生成例項,此時,所有例項的age個eat()方法都會指向同一個記憶體地址,也就是prototype物件,這樣也就避免了記憶體浪費問題,從而提供執行效率。
console.log(dog1.eat == dog2.eat); // true
當然為了驗證這一問題,js定義了一些輔助屬性。
1. isPrototypeOf() , 此方法用於驗證prototype物件和例項化物件之間的關聯
console.log(Dog.prototype.isPrototypeOf(dog1)); // true console.log(Dog.prototype.isPrototypeOf(dog2)); // true
2. HasOwnProperty() , 每個例項化物件都有此方法,顧名思義,這個方法是用於驗證屬性是自有的還是繼承自prototype物件的 ; 這裡很顯然type是自有屬性,而age是繼承自prototype物件。
console.log(dog1.hasOwnProperty('type')) // true console.log(dog1.hasOwnProperty('age')) // false
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2765846/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- javascript:物件導向的程式設計JavaScript物件程式設計
- Javascript 物件導向程式設計(一)JavaScript物件程式設計
- Javascript 物件導向程式設計(二)JavaScript物件程式設計
- Javascript 物件導向程式設計(三)JavaScript物件程式設計
- 前端_JavaScript_物件導向程式設計前端JavaScript物件程式設計
- JavaScript-設計模式-物件導向程式設計JavaScript設計模式物件程式設計
- JavaScript設計模式之物件導向程式設計JavaScript設計模式物件程式設計
- JavaScript物件導向程式設計——Array型別JavaScript物件程式設計型別
- JavaScript 物件導向初步理解JavaScript物件
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- 物件導向程式設計物件程式設計
- 《JavaScript物件導向精要》之三:理解物件JavaScript物件
- 理解Js中物件導向程式設計的繼承JS物件程式設計繼承
- 好程式設計師前端教程-javascript的物件導向程式設計師前端JavaScript物件
- Python物件導向程式設計Python物件程式設計
- 程式設計思想 物件導向程式設計物件
- js物件導向程式設計JS物件程式設計
- 十三、物件導向程式設計物件程式設計
- 十六、物件導向程式設計物件程式設計
- Python 物件導向程式設計Python物件程式設計
- JS物件導向程式設計(一):物件JS物件程式設計
- 物件導向程式設計C++物件程式設計C++
- Python OOP 物件導向程式設計PythonOOP物件程式設計
- python技能--物件導向程式設計Python物件程式設計
- JS物件導向的程式設計JS物件程式設計
- 06 物件導向程式設計 (續)物件程式設計
- Python物件導向程式設計(1)Python物件程式設計
- Scala的物件導向程式設計物件程式設計
- Python - 物件導向程式設計 - super()Python物件程式設計
- Python - 物件導向程式設計 - @propertyPython物件程式設計
- 物件導向(理解物件)——JavaScript基礎總結(一)物件JavaScript
- 看完這篇,真正理解JS物件導向程式設計思想JS物件程式設計
- 學半年程式設計才知道“物件導向”可以這樣理解程式設計物件
- 史上最全 Python 物件導向程式設計Python物件程式設計
- 淺談PHP物件導向程式設計PHP物件程式設計
- JS物件導向程式設計(三):原型JS物件程式設計原型
- [筆記]物件導向的程式設計筆記物件程式設計
- python基礎(物件導向程式設計)Python物件程式設計