2012-11-27 50 views
1

我的一個班需要這個功能簡單的工作:擴展的indexOf與字符代碼工作在AS3

private function indexOfCode(txt:String, charcode:int, ini:int=0):int { 
     for(var i:int=ini; i<txt.length; i++){ 
      if(txt.charCodeAt(i)==charcode) return i; 
     } 
     return -1; 
    } 

就像String.indexOf,而是尋找一個代碼(我在尋找類似的控制代碼換行)。

在JavaScript中我會擴展使用原型的String類。在AS3中,它接縫這是一種「舊時尚」的做法,但爲定製課程創建另一個自定義類接縫的程度非常高。有沒有簡單的方法來擴展字符串?任何其他建議?

回答

1

你可以通過靜態方法通過某些類來完成它,例如, StringUtils.indexOfCode();或者你可以把全局函數,像這樣:

package 
{ 
    public function indexOfCode(txt:String, charcode:int, ini:int=0):int 
    { 
     for(var i:int=ini; i<txt.length; i++) 
     { 
      if(txt.charCodeAt(i)==charcode) return i; 
     } 
     return -1; 
    } 
} 
+0

我在考慮添加String.indexOfCode()方法,而不是創建另一個類。 – Gustavo

+0

說實話,我不認爲你可以用String來做到這一點。你有沒有試圖擴展字符串? –

0

請確保您的原型代碼編譯需要越過/調用之前原型函數執行至少一次。

String.prototype.indexOfCode = function(txt:String, charcode:int, ini:int=0):int 
{ 
    for(var i:int=ini; i<txt.length; i++) 
    { 
     if(txt.charCodeAt(i)== charcode) return i; 
    } 

    return -1; 
} 


var letters:String = "ABCDEFG"; 
trace("indexOfCode :: " + letters.indexOfCode(letters,67,0)); //Complier error if strict mode 
trace("indexOfCode :: " + letters["indexOfCode"](letters,67,0)); //No error 

問題:

  1. 動態實例變量不被添加到運行時;
  2. 編譯器不知道它是否存在,並且如果它在嚴格模式下使用會產生錯誤,並且您可以避免使用原型函數。

基本上我們不能擴展String類,因爲它是在actionscript中的密封類。