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()提供一个默认实现,一般不实用(想不出好办法,凑合一下)。
    其余是常用类型我已实现的部分,仅供参考。
  • 相关阅读:
    游遍中国 —— 大街小巷、秘境与远方
    Batch Normalization 反向传播(backpropagation )公式的推导
    Batch Normalization 反向传播(backpropagation )公式的推导
    【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
    【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
    linux 线程的同步 一 (互斥量和信号量)
    linux find
    正则表达式30分钟入门教程-新
    linux sed命令详解 *****
    linux vim tutor
  • 原文地址:https://www.cnblogs.com/Apq/p/366962.html
Copyright © 2011-2022 走看看