1

私のクラスの1つは、この単純な関数が機能する必要があります:

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 では、これは "昔ながらの" 慣行ですが、カスタム クラスの継ぎ目に対して別のカスタム クラスを作成することは非常に困難です。文字列を拡張する簡単な方法はありますか? 他の提案はありますか?

4

2 に答える 2

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;
    }
}
于 2012-11-27T12:41:36.380 に答える
0

プロトタイプ関数を呼び出す前に、プロトタイプ コード コンパイラが少なくとも 1 回クロス/実行する必要があることを確認してください。

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. コンパイラはそれが存在することを認識せず、strict モードで使用するとエラーを生成し、プロトタイプ関数を避けることができます。

基本的にStringクラスはactionscriptのsealedクラスなので拡張できません。

于 2012-11-29T14:26:59.497 に答える