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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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;
}
}

留言

2006-08-10
次访问