首先要感谢ys8616270这位朋友,他提供了一个很好的方法,但用这个方法做测试的时候出现了问题,所以想请大家指点一下。
贴上我的代码: <script type="text/javascript">
//在JavaScript里面自定义一个类
function User(name,age){ 
          this.name=name;
          this.age=age;
          this.canFly=false;
    }
var u = new User("abc",22);
alert(typeof(u));

var jsonstr = Serialize(new User("def",22));
alert (jsonstr);

function Serialize(obj){    
 switch(obj.constructor){    
 case Object:    
 var str = "{";    
 for(var o in obj){    
 str += o + ":" + Serialize(obj[o]) +",";    
 }    
 if(str.substr(str.length-1) == ",")    
 str = str.substr(0,str.length -1);    
  return str + "}";    
  break;    
  case Array:                
  var str = "[";    
  for(var o in obj){    
  str += Serialize(obj[o]) +",";    
  }    
  if(str.substr(str.length-1) == ",")    
  str = str.substr(0,str.length -1);    
  return str + "]";    
  break;    
  case Boolean:    
  return "\"" + obj.toString() + "\"";    
  break;    
  case Date:    
  return "\"" + obj.toString() + "\"";    
  break;    
  case Function:    
  break;    
  case Number:    
  return "\"" + obj.toString() + "\"";    
  break;     
  case String:    
  return "\"" + obj.toString() + "\"";    
  break;        
  }    
  }  
</script>这里第一次弹出的是object,第二次弹出的是undefined,可我觉得代码看上去没问题,这是什么原因?希望了解JavaScript知识的朋友帮助指点一下。
谢谢大家乐,^_^

解决方案 »

  1.   

    把switch换成if else,javascript不允许这么使用switch,只允许case标识为整形变量,比如int或char
      

  2.   


    杯具了原来还会显示一个undefined的;一改就神马显示都没有了。
      

  3.   

    那你应该检查你代码的逻辑,我说的是真的,javascript的确不能这么用,至于为什么什么都没了,肯定是逻辑上有问题。很遗憾地告诉你,obj.constructor的值为这个"类"的构造函数
    function User(name,age){ 
              this.name=name;
              this.age=age;
              this.canFly=false;
            }
    按你的思路估计不行,稍等,我帮你写个
      

  4.   


    js里switch非整形也是可以的
      

  5.   

    或许我弄错了吧,又把java和javascript弄混淆了,不管了,试试我的代码,或许有些类型还没考虑到function User(name,age){ 
              this.name=name;
              this.age=age;
              this.canFly=false;
      this.obj={a:{c:1,d:new Date()},b:2};
      this.fun=function(){alert('ok');};
      this.date=new Date();
      this.undef=undefined;
      this.nul=null;
            }
            var u = new User("abc",22);
            var jsonstr = Serialize(new User("def",22));
            alert (jsonstr);               function Serialize(obj){
    var str='{';
    for(var o in obj){
    if(typeof(obj[o])!='object'){
    str+=o.toString()+':'+obj[o]+',';
    }
    else if(obj[o]!=null && obj[o].toString()=='[object Object]'){
    str+=o.toString()+':'+Serialize(obj[o])+',';
    }
    else if(obj[o]!=null){
    str+=o.toString()+':'+obj[o].toString()+',';
    }
    else if(obj[o]==null){
    str+=o.toString()+':'+obj[o]+',';
    }
    }
    if(str.length>1) str=str.substr(0,str.length -1);
    str+='}';
    return str;
            }