zoukankan      html  css  js  c++  java
  • 利用JScript的Literal Syntax特性用字符串表示对象

    这里说的是JScript对象的字符串表示实现,利用的就是其Literal Syntax特性。
    为了统一,我采用方法名为:toJSON,默认实现为无参数(如果你愿意,也可以写点参数的,),意思简单,话就不多说了,看代码:
        /// toJSON --------------------------------------------------------------------------------------------------------------------------------
        /// 用字符串表示对象
        Apq.toJSON = function( o ) {
            
    var strClassName = Apq.getClassName( o ).toLowerCase();
            
    if( strClassName == "undefined" || strClassName == "null" )
            
    {
                
    return strClassName;
            }

            
    if( strClassName == "system.xml.xmldocument" || strClassName == "system.xml.xmlnode" )
            
    {
                
    // Xml 相关类
                return o.xml;
            }

            
    var args = Function.Args2Ary( arguments, 1 );
            
    return o.toJSON.apply( o, args );
        }
    ;
        
        
    /// Object
        Object.prototype.toJSON = function(){
            
    return "{}";
        }
    ;
        
        
    /// Array
        Array.prototype.toJSON = function(){
            
    var a = [];
            
    forvar i = 0; i < this.length; i++ )
            
    {
                a.push( Apq.toJSON(
    this[i]) );
            }

            
    return "" + a.join( "" ) + " ]";
        }
    ;
        
        Boolean.prototype.toJSON 
    = function(){
            
    return this.toString.apply( this, arguments );
        }
    ;
        
        Number.prototype.toJSON 
    = function(){
            
    if( isFinite( this ) )
            
    {
                
    return this.toString();
            }

            
    else if( isNaN( this ) )
            
    {
                
    return "NaN";
            }

            
    else
            
    {
                
    return "Number." + (this > 0 ? "POSITIVE_INFINITY" : "NEGATIVE_INFINITY");
            }

        }
    ;
        
        String.prototype.toJSON 
    = function(){
            
    var s = this.replace( /(["\\])/g, '\\$1' );
            s = s.replace( /\n/g, 
    "\\n" );
            s = s.replace( /\r/g, 
    "\\r" );
            return '
    "+ s + '"';
        };
        Error.prototype.toJSON = function(){
            return 
    "{ number: " + this.number + ", name: " + this.name + ", message: " + this.message + " }";
        };
        RegExp.prototype.toJSON = function(){
            return this.toString.apply( this, arguments );
        };

    这里的Apq只是一个普通对象(即new Object() || {}),自己添加下就行了。
    Apq.toJSON()只是提供一个统一的调用接口,具体实现则由各自的类负责。
    Object.prototype.toJSON()提供一个默认实现,一般不实用(想不出好办法,凑合一下)。
    其余是常用类型我已实现的部分,仅供参考。
  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/Apq/p/366962.html
Copyright © 2011-2022 走看看