trace2 in FMS

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:trace2 in FMS
  • 本文链接:http://zengrong.net/post/238.htm

基于fczone改写的framework.asc(详见让FMS中的trace支持Object),我稍作修改,加入了对Array和Object的判断,做成了这个trace2()函数,使用前只需先load(“trace2.acs”)即可,不需要载入framework.asc了:

8月13日更新:解决了不处理Object的问题

function trace2(data){
if(typeof(data) == "object"){
if(data instanceof Stream || data instanceof File || data instanceof LoadVars ||
data instanceof XML || data instanceof XMLSocket || data == application)    {
//
trace(data.toString());
}else if(data instanceof SharedObject){
var dat = new Object();
//
trace("[object SharedObject name="+data.name+"]");
//
var props = data.getPropertyNames();
for(var i in props) {
if(props[i]){
var o = data.getProperty(props[i]);
trace("\t"+props[i]+" = " + objString(o));
}
}
//
}else{
trace(objString(data));
}
}else{
trace(data.toString());
}
}

/*將內容對象轉換成字符串
* @param data   要被轉換的對象
* @param ignore 需要跳過的屬性
*/
function objString(data, ignore){
var msg;
if(typeof(data) == "object"){
if(data instanceof Array){
msg = objectString(data, ignore, "Array");
}else if(data instanceof Object){
msg = objectString(data, ignore, "Object");
}else if(data instanceof Client){
msg = "[object Client ip=" + data.ip + " uri="+data.uri+" args=" + objString(data.__ARGUMENTS__, data)+"]";
}else if(data instanceof NetConnection){
msg = "[object NetConnection connected=" + data.isConnected + " uri="+data.uri+"]";
}else{
msg = data;
}
}else{
msg = data.toString();
}
//
return msg;
}

/*
將參數中的對象轉換成字符串。此函數與objString的區別是,objString轉換所有的對象類型,而objectString僅轉換Object對象類型
* @param data   要被轉換的對象
*/
function objectString(data, ignore, type){
/*由于Remoting返回的實際上是關聯數組而非對象,因此這些“對象”其實屬于Array類型
这样就给判断真正的类型造成了难度。因为联合数组实际上是没有length属性的,必须用for in循环来获取其中的值
通过判断length是否存在,是用不同的循环获取
*/
if(type == "Array"){
if(data.length){
var msg = "[";
for(var i=0; i
if(data[i] == ignore){
continue;
}
msg += objString(data[i]);
if(i != data.length - 1){
msg += ", ";
}
}
msg += "]";
return msg;
}else{
//如果是关联数组,就把它变成一个真正的对象,并调用对象处理程序
var o = new Object();
for(var i in data){
o[i] = data[i];
}
return objectString(o, null, "Object");
}
}else if(type == "Object"){
//如果是真正的Object
var msg = "{";
for(var i in data){
if(data[i] == ignore){
continue;
}
msg += i + ":" + objString(data[i]);
msg += ", ";
}
msg = msg.slice(0, -2); //去掉最后的一个逗号和一个空格
msg += "}";
return msg;
}
}