一般咱們寫js以及調用:javascript
function init(){ console.log("init") } function load(){ console.log("load") } init(); load();
在頁面的script標籤對裏定義兩個function,而後執行一下函數名便可。若是咱們還要定義一些變量,或者別的函數啥的 ,則繼續按照語法往下寫。長此以往,這個頁面函數不可勝數,分不清哪些函數是同屬一個功能,哪些函數同屬另外一個功能,這樣很明顯不友好,我以前就在幾千行的js中找某個功能的N個方法,大多在一塊,個別不在,很難找,特費勁。html
大概是出身後端的緣由,對面向對象有必定的理解,後來知道javascript也能夠面向對象編程,一些寫法天然也就有所變化了~java
既然是面向對象編程,那麼一切皆對象,咱們就用對象這個點來闡述下面要講到的面向對象編程。git
什麼是對象?=>萬物皆對象。github
對象的特徵是什麼=>具備一系列的屬性和方法。編程
因此咱們在進行面向對象編程的時候,重點看屬性和方法。後端
javascript建立對象有三種方式,分別是字面量方式、函數方式、原型方式:設計模式
//字面量方式 var obj1={ init:function(){ console.log("init1") } }; obj1.init(); //函數方式 var obj2=function(){ this.init=function(){ console.log("init2") } } var obj2=new obj2(); obj2.init(); //原型方式 function Obj3(){} Obj3.prototype.init=function(){ console.log("init3"); } var obj3=new Obj3(); obj3.init();
字面量方式的本質實際上是javascript的語法糖,var obj1={} 等價於 var obj1 = new Object();函數
函數方式也不復雜,能夠理解爲一個類,類裏面就有屬性和方法,當對這個類進行實例化,也就是new操做的時候,會生成一個具有類的屬性和方法的對象。this
原型方式涉及到javascript中的原型和原型鏈,這塊比較深度, 目前不作多說,僅需知道便可。
關於使用面向對象進行編程,我很早時候寫了一個栗子在github,https://github.com/lovemoqing/UploadImg/blob/master/UploadImg.html 能夠點開看看。
...
小結一寫,在面對業務龐雜的js代碼時,在編寫之初就應該設計好對象,以及對象的屬性和方法,通常一個功能點對應一個對象,這樣在編寫js的時候,根據對象的劃分,代碼會很是優雅,也方便後續查找和維護。總之,寫法只是一個入門,面向對象還有不少待深刻的地方,好比javascript設計模式等。