我正在开发一个闪存(Flash 9,AS3)来连接服务器并将数据发送/接收/解析到JavaScript / HTML上的聊天。 我有这样的结构:
package {
public class myClass {
String.prototype.escapeHtml = function() {
var str = this.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
return str;
}
function writeToBrowser(str:String) {
ExternalInterface.call("textWrite",str.escapeHtml());
}
}
}
当我编译它时,我收到此错误:
1061:调用可能未定义的内容 方法escapeHtml通过引用 使用静态类型String。
如果删除:String
,一切正常,但是我必须检查str
是否为字符串,是否未定义等等。
我的代码中有很多这样的函数,其中很多都接收用户输入的数据,所以我认为删除:String
并对每个函数进行多次检查并不是最好的方法。
我怎样才能做到这一点?
答案 0 :(得分:2)
然后定义函数:
public function escapeHtml( str : String ) : String
{
var str = this.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
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, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
return str;
}
}
}