ActionScript problem with prototype and static type variables

荒凉一梦 提交于 2019-12-23 15:35:47

问题


I'm developing a flash (Flash 9, AS3) to connect to a server and send/receive/parse data to a chat on JavaScript/HTML. I have a structure like this:

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());
        }
    }
}

When I compile it, I get this error:

1061: Call to a possibly undefined method escapeHtml through a reference with static type String.

If I remove the :String, it all works fine, but then I'd have to check if str is a String and if it's not undefined and so on.

I have many functions like this on my code, many of them receive user-entered data, so I think that removing the :String and doing many checks on every function isn't the best approach.

How can I make this right?


回答1:


Then just define the function:

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

    return str;
}

in your class.

And call it:

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

:)




回答2:


you get an error because the compiler is in strict mode. if you want to stay in strict mode you can try this:

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



回答3:


Prototype is actually legacy.

You should extend the String class and use your custom class

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;
        }
    }
}


来源:https://stackoverflow.com/questions/565154/actionscript-problem-with-prototype-and-static-type-variables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!