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

请确保您的原型代码编译器在调用原型函数之前至少需要交叉/执行一次。

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 中的密封类。

于 2012-11-29T14:26:59.497 回答