近在幾個群上經常看到有人問在一個類裡的一個 function 怎麼調用 this. 定義後公開的方法。現發一篇類實現的隨筆。
首先說說類,在一個類裡我們會有以下的幾個特徵:
1. 公有方法
2. 私人方法
3. 屬性
4. 私人變數
5. 建構函式
我們直接看一個例子:
/***定義類***/var Class = function(){ var _self = this;//把本身引用負值到一變數上 var _Field = "Test Field"; //私人欄位 var privateMethod = function(){ //私人方法 alert(_self.Property); //調用屬性 } this.Property = "Test Property"; //公有屬性 this.Method = function(){ //公有方法 alert(_Field); //調用私用欄位 privateMethod(); //調用私用方法 }}
這裡我已把注釋都寫上,大家大概也會一眼就看得明白。對於少寫JS的朋友,可能會覺得奇怪為什麼我會定義一個_self的變數, 因為在js裡,this不用對於其他的對象語言,他的解析過程與運行過程中this會改變的。這裡簡單說說js裡this的定義,若有需要我可以開多一篇。
定義:this是包含它的函數作為方法被調用時所屬的對象。
特徵:this的環境可以隨著函數被賦值給不同的對象而改變!
有興趣的朋友可以網上找找資料瞭解一下,說回正題,這裡的_self目的是為了開多一個私人的變數,把引用直接指向類的本身。
剛剛還說到一個建構函式的問題,這可以直接用代碼來實現。在函數的最後直接寫執行代碼就OK。
/***定義類***/var Class = function(){ var _self = this;//把本身引用負值到一變數上 var _Field = "Test Field"; //私人欄位 var privateMethod = function(){ //私人方法 alert(_self.Property); //調用屬性 } this.Property = "Test Property"; //公有屬性 this.Method = function(){ //公有方法 alert(_Field); //調用私用欄位 privateMethod(); //調用私用方法 } /***建構函式***/ var init = function(){ privateMethod(); } init();}
使用這個類
var c = new Class();
c.Method(); //使用方法
這樣就OK了
轉載請註明轉自《Javascript 類的實現》