OSDN Git Service

e9d96df5f3103c6286fe1c3b7892c2edcd8fe0b5
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 04_XObject.js
1 \r
2 var X_Object_inObject = X_UA.IE < 5.5 ? // TODO JScript で判定\r
3         (function( name, obj ){\r
4                 var p;\r
5                 if( obj[ name ] ) return true; // quick\r
6                 name += ''; // 数値も許可\r
7                 for( p in obj ){\r
8                         if( p === name ) return true;\r
9                 };\r
10                 return false;\r
11         }) :\r
12         new Function( 'a,b', 'return a in b' );// なぜか ie5 でもerror\r
13 \r
14 \r
15 X.Object = {\r
16         clone      : X_Object_clone,\r
17         \r
18         override   : X_Object_override,\r
19         \r
20         deepCopy   : X_Object_deepCopy,\r
21         \r
22         cloneArray : X_Object_cloneArray,\r
23         \r
24         isEmpty    : X_Object_isEmpty,\r
25         \r
26         inObject   : X_Object_inObject\r
27 };\r
28         \r
29 function X_Object_clone( src ){\r
30         var ret, k;\r
31         if( typeof src !== 'object' ) return src;\r
32         ret = {};\r
33         for( k in src ){\r
34                 //if( X_EMPTY_OBJECT[ k ] ) continue;\r
35                 ret[ k ] = src[ k ];\r
36         };\r
37         return ret;\r
38 };\r
39 \r
40 function X_Object_override( target, src ){\r
41         var k;\r
42         if( !X.Type.isObject( src ) ) return target;\r
43         for( k in src ){\r
44                 //if( X_EMPTY_OBJECT[ k ] ) continue;\r
45                 target[ k ] = src[ k ];\r
46         };\r
47         return target;\r
48 };\r
49 \r
50 function X_Object_deepCopy( src ){              \r
51         return X_Object_deepCopy_( src, [], [], -1 );\r
52 };\r
53 \r
54 function X_Object_deepCopy_( src, objSrc, objCopy, n ) {\r
55         var ret, i, k;\r
56         if( !src ){ // 0, "", null, undefined, NaN, false\r
57                 return src;\r
58         } else\r
59         if( X.Type.isArray( src ) ){\r
60                 i = objSrc.indexOf( src );\r
61                 if( i !== -1 ) return objCopy[ i ];\r
62                 objSrc[ ++n ] = src;\r
63                 objCopy[ n ]  = ret = [];\r
64         } else\r
65         if( X.Type.isObject( src ) ){\r
66                 i = objSrc.indexOf( src );\r
67                 if( i !== -1 ) return objCopy[ i ];\r
68                 objSrc[ ++n ] = src;\r
69                 objCopy[ n ]  = ret = {};\r
70         } else {\r
71                 // string, number, true\r
72                 return src;\r
73         };\r
74         for( k in src ){\r
75                 //if( X_EMPTY_OBJECT[ k ] ) continue;\r
76                 ret[ k ] = clone( src[ k ], objSrc, objCopy, n );\r
77         };\r
78         return ret;\r
79 };\r
80 \r
81 function X_Object_cloneArray( ary ){\r
82         var ret = [],\r
83                 i = ary.length;\r
84         if( !i ) return ret;\r
85         for( ; i; ){\r
86                 ret[ --i ] = ary[ i ];\r
87         };\r
88         return ret;\r
89 };\r
90         \r
91 function X_Object_isEmpty( v ){\r
92         var k;\r
93         for( k in v ){\r
94                 //if( X_EMPTY_OBJECT[ k ] ) continue;\r
95                 return false;//if( v.hasOwnProperty && v.hasOwnProperty( p ) ) return false; ie4 で動かない、、、\r
96         };\r
97         return true;\r
98 };\r
99 \r
100 /*      \r
101 X.matchTest = function( array1, array2 ){\r
102         var i = array2.length;\r
103         for( ; i; ){\r
104                 if( array1.indexOf( array2[ --i ] ) === -1 ) return false;\r
105         };\r
106         return true;\r
107 }; */\r