原型和静态类型变量的ActionScript问题

时间:2009-02-19 12:42:36

标签: actionscript-3 prototype

我正在开发一个闪存(Flash 9,AS3)来连接服务器并将数据发送/接收/解析到JavaScript / HTML上的聊天。 我有这样的结构:

package {
    public class myClass {
        String.prototype.escapeHtml = function() {
            var str = this.replace(/&/g, "&");
            str = str.replace(/</g, "&lt;");
            str = str.replace(/>/g, "&gt;");
            return str;
        }

        function writeToBrowser(str:String) {
            ExternalInterface.call("textWrite",str.escapeHtml());
        }
    }
}

当我编译它时,我收到此错误:

  

1061:调用可能未定义的内容   方法escapeHtml通过引用   使用静态类型String。

如果删除:String,一切正常,但是我必须检查str是否为字符串,是否未定义等等。

我的代码中有很多这样的函数,其中很多都接收用户输入的数据,所以我认为删除:String并对每个函数进行多次检查并不是最好的方法。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

然后定义函数:

public function escapeHtml( str : String ) : String
{
    var str = this.replace(/&/g, "&amp;");
    str = str.replace(/</g, "&lt;");
    str = str.replace(/>/g, "&gt;");

    return str;
}

在你班上。

并称之为:

public function writeToBrowser( str : String )
{
    ExternalInterface.call( "textWrite", escapeHtml( str ) );
}

:)

答案 1 :(得分:2)

您收到错误,因为编译器处于严格模式。 如果你想保持严格模式,你可以试试这个:

ExternalInterface.call("textWrite",str["escapeHtml"]() );

答案 2 :(得分:1)

Prototype实际上是遗产。

您应该扩展String类并使用自定义类

package {
    public class myClass {

        public function writeToBrowser(str:CustomString) {
                ExternalInterface.call("textWrite",str.escapeHtml());
        }
    }
    public class CustomString {

        public function escapeHtml():String {
                var str = this.replace(/&/g, "&amp;");
                str = str.replace(/</g, "&lt;");
                str = str.replace(/>/g, "&gt;");
                return str;
        }
    }
}