OSDN Git Service

Version 0.6.118, fix X.Audio.Sprite & 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; // 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                 ret[ k ] = src[ k ];\r
35         };\r
36         return ret;\r
37 };\r
38 \r
39 function X_Object_override( target, src ){\r
40         var k;\r
41         if( !X.Type.isObject( src ) ) return target;\r
42         for( k in src ){\r
43                 target[ k ] = src[ k ];\r
44         };\r
45         return target;\r
46 };\r
47 \r
48 function X_Object_deepCopy( src ){              \r
49         return X_Object_deepCopy_( src, [], [], -1 );\r
50 };\r
51 \r
52 function X_Object_deepCopy_( src, objSrc, objCopy, n ) {\r
53         var ret, i, key;\r
54         if( !src ){ // 0, "", null, undefined, NaN, false\r
55                 return src;\r
56         } else\r
57         if( X.Type.isArray( src ) ){\r
58                 i = objSrc.indexOf( src );\r
59                 if( i !== -1 ) return objCopy[ i ];\r
60                 objSrc[ ++n ] = src;\r
61                 objCopy[ n ]  = ret = [];\r
62         } else\r
63         if( X.Type.isObject( src ) ){\r
64                 i = objSrc.indexOf( src );\r
65                 if( i !== -1 ) return objCopy[ i ];\r
66                 objSrc[ ++n ] = src;\r
67                 objCopy[ n ]  = ret = {};\r
68         } else {\r
69                 // string, number, true\r
70                 return src;\r
71         };\r
72         for( key in src ){\r
73                 ret[ key ] = clone( src[ key ], objSrc, objCopy, n );\r
74         };\r
75         return ret;\r
76 };\r
77 \r
78 function X_Object_cloneArray( ary ){\r
79         var ret = [],\r
80                 i = ary.length;\r
81         if( !i ) return ret;\r
82         for( ; i; ){\r
83                 ret[ --i ] = ary[ i ];\r
84         };\r
85         return ret;\r
86 };\r
87         \r
88 function X_Object_isEmpty( v ){\r
89         var p;\r
90         for( p in v ){\r
91                 return false;//if( v.hasOwnProperty && v.hasOwnProperty( p ) ) return false; ie4 で動かない、、、\r
92         };\r
93         return true;\r
94 };\r
95 \r
96 /*      \r
97 X.matchTest = function( array1, array2 ){\r
98         var i = array2.length;\r
99         for( ; i; ){\r
100                 if( array1.indexOf( array2[ --i ] ) === -1 ) return false;\r
101         };\r
102         return true;\r
103 }; */\r