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()提供一个默认实现,一般不实用(想不出好办法,凑合一下)。
    其余是常用类型我已实现的部分,仅供参考。
  • 相关阅读:
    Mongoose 校验参数
    meta大全
    go并发之WaitGroup
    用Tasker实现收到Android手机短信自动转发到微信
    不用双卡iPhone,仅需五步,老iOS手机自动给你转发短信
    怎样选择莫代尔秋衣裤
    关于ROS的dst-nat和src-nat的理解,和公司的一个案例以及解决方案
    关于ADSL拨号多拨跟运营商AC服务器之间的关系和一些技巧,群里大神给的经验
    查询网站的dns,get,劫持检测等等
    zabbix自定义key类型之计算(Calculated items) 在流量曲线图里,把各个item的值叠加的方法
  • 原文地址:https://www.cnblogs.com/Apq/p/366962.html
Copyright © 2011-2022 走看看