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()提供一个默认实现,一般不实用(想不出好办法,凑合一下)。
    其余是常用类型我已实现的部分,仅供参考。
  • 相关阅读:
    django-makdown编辑器之编辑和显示
    Jenkins以root用户运行的方法
    利用Django提供的ModelForm增删改数据的方法
    Django之URL反向解析
    腾讯云-tke-设置configmap
    线程同步
    测试人的福利来了!柠檬班题库免费对外开放啦。
    如何设计一个高并发系统?
    为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
    记一次idea问题—performing vcs refresh...
  • 原文地址:https://www.cnblogs.com/Apq/p/366962.html
Copyright © 2011-2022 走看看