ClassScript:像Java一樣的寫法來宣告JavaScript的Class

目前主流的JavaScript library 相當多,像是 jQueryMootools...等等,都是相當熱門的。但是其中還是各自有其優缺點,像是jQuery感覺就是以Element為重心,全部的動作幾乎都是過$()函式的呼叫來取得欲操作的element,但是對於他的擴充性,可能必須先其有相當的瞭解,才能開發自己的Plugin,而mootools其實比較符合用物件導向的方式開發,可以使用class的方法來讓你建立一個像是Java的class宣告式,雖然程式碼可能會因此多了一點,但是在往後的擴充與管理有著相當的優勢,唯一稍嫌不足的是它的方法命名都取的蠻奇怪的,雖然字義上是沒錯,但卻不是平常看到的,所以當初在學習時,會讓感覺需刻意去瞭解你本來就知道的東西,經常會看完一個方法的介紹後,心中浮現出"原來是這個阿!"。而且它的Class宣告是使用new Class()來建立,對於學過Java的人感覺的確會讓人覺得怪怪的。

有借於此,我自己寫了一個模擬Java寫法的Class宣告方式,對於想能在JavaScript的環境中,像Java一樣的輕鬆宣告Class,或許可以讓你在JavaScript開發物件導向程式更容易上手,目實作了Package,Class,Extends,Implements四個主要方法:

首先先取得ClassScript的Core.Js檔:
你可以選擇下載或直接使用放在google上的路徑

<script type='text/javascript' src='http://classscript.googlecode.com/files/http://classscript.googlecode.com/files/ClassScript-1.0.2beta.js'></script>


我最喜歡用魔獸爭霸的英雄來說明類別的宣告了XD,來建立英雄類別吧!(JavaScript有支援utf-8的編碼,所以用中文變數也ok啦~這是為了讓讀者更容易理解,一般還是不建議使用中文變數,因為什麼時候會出錯都不一定)

Class的宣告方式:

Class("英雄")(function(){
    // 使用var來宣告變數,使用var宣告的的變數具有private(私有)的屬性,而使用this來表示pulbic(公開)屬性
    var 名稱;
    var 生命值;
    var 法力值;
    var 力量;
    var 敏捷;
    var 智慧;
 
    var 傷害;
    var 攻擊速度;
    var 裝甲;
    var 移動速度;
 
    // 建構子名稱必須為 constructor,並且必須為公開方法
    this.constructor = function(設定){
        // 使用  || 可以指定變數為左邊或右邊的值,簡單來說當左邊的值沒有定義或為null,值使用右邊的數值
        名稱 = 設定.名稱 || '???';
        生命值 = 設定.生命值 || 100;
        法力值 = 設定.法力值 || 100;
        力量 = 設定.力量 || 10;
        敏捷 = 設定.敏捷 || 10;
        智慧 = 設定.智慧 || 10;
 
        傷害 = 設定.傷害 || 10;
        攻擊速度 = 設定.攻擊速度 || 10;
        裝甲 = 設定.裝甲 || 10;
        移動速度 = 設定.移動速度 || 10;
    }
 
    this.移動 = function(){
 
    }
 
    this.停止 = function(){
 
    }
 
    this.固守 = function(){
 
    }
 
    this.攻擊 = function(){
 
    }
 
    this.巡邏 = function(){
 
    }
 
    this.學習技能 = function(){
 
    }
 
    this.打招呼 = function(){
        alert('Hi, 我叫' + 名稱);
    }
})

宣告完畢後,接下來就是把它new出來

var 我的英雄 = new 英雄({
    '名稱': '上山採藥',
    '生命值': 1000,
    '法力值': 500,
    '力量': 25,
    '敏捷': 20,
    '智慧': 17,
    '傷害': 50,
    '攻擊速度': 120,
    '裝甲': 12,
    '移動速度': 300
})
 
我的英雄.打招呼(); //→ 顯示 'Hello, 我是上山採藥'

這個範例雖然很弱=..=,但是大概可以看出個樣子吧,為了不拉長篇幅,下一篇再來介紹詳細的使用方法...

回應(Leave a Reply)