OSDN Git Service

Version 0.6.104, fix X_shortcut & etc.
[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;\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         \r
17         clone      : X_Object_clone,\r
18         \r
19         deepCopy   : X_Object_deepCopy,\r
20         \r
21         cloneArray : X_Object_cloneArray,\r
22         \r
23         isEmpty    : X_Object_isEmpty,\r
24         \r
25         inObject   : X_Object_inObject\r
26 };\r
27         \r
28 function X_Object_clone( src ){\r
29         var ret, k;\r
30         if( typeof src !== 'object' ) return src;\r
31         ret = {};\r
32         for( k in src ){\r
33                 ret[ k ] = src[ k ];\r
34         };\r
35         return ret;\r
36 };\r
37 \r
38 function X_Object_deepCopy( src ){              \r
39         return X_Object_deepCopy_( src, [], [], -1 );\r
40 };\r
41 \r
42 function X_Object_deepCopy_( src, objSrc, objCopy, n ) {\r
43         var ret, i, key;\r
44         if( !src ){ // 0, "", null, undefined, NaN, false\r
45                 return src;\r
46         } else\r
47         if( X.Type.isArray( src ) ){\r
48                 i = objSrc.indexOf( src );\r
49                 if( i !== -1 ) return objCopy[ i ];\r
50                 objSrc[ ++n ] = src;\r
51                 objCopy[ n ]  = ret = [];\r
52         } else\r
53         if( X.Type.isObject( src ) ){\r
54                 i = objSrc.indexOf( src );\r
55                 if( i !== -1 ) return objCopy[ i ];\r
56                 objSrc[ ++n ] = src;\r
57                 objCopy[ n ]  = ret = {};\r
58         } else {\r
59                 // string, number, true\r
60                 return src;\r
61         };\r
62         for( key in src ){\r
63                 ret[ key ] = clone( src[ key ], objSrc, objCopy, n );\r
64         };\r
65         return ret;\r
66 };\r
67 \r
68 function X_Object_cloneArray( ary ){\r
69         var ret = [], i = ary.length;\r
70         if( !i ) return ret;\r
71         for( ; i; ){\r
72                 ret[ --i ] = ary[ i ];\r
73         };\r
74         return ret;\r
75 };\r
76         \r
77 function X_Object_isEmpty( v ){\r
78         var p;\r
79         for( p in v ){\r
80                 return false;//if( v.hasOwnProperty && v.hasOwnProperty( p ) ) return false; ie4 で動かない、、、\r
81         };\r
82         return true;\r
83 };\r
84 \r
85 /*      \r
86 X.matchTest = function( array1, array2 ){\r
87         var i = array2.length;\r
88         for( ; i; ){\r
89                 if( array1.indexOf( array2[ --i ] ) === -1 ) return false;\r
90         };\r
91         return true;\r
92 }; */\r