OSDN Git Service

Version 0.6.15, add X.Dom.BoxModel.
[pettanr/clientJs.git] / 0.6.x / js / core / 00_builtin.js
1 /* \r
2  * ビルトインオブジェクトに拡張したい10のメソッド\r
3  * http://d.hatena.ne.jp/ofk/20080922/1222047483\r
4  */\r
5 \r
6 Function.prototype.apply || (Function.prototype.apply = function (x, y) {\r
7         var a, i, r, j;\r
8         x = x || window;\r
9         y = y || [];\r
10         \r
11         // apply 内で apply を呼んだ場合に備える\r
12         if( x === window ){\r
13                 x.__apply = void 0;\r
14         } else {\r
15                 delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;\r
16         };\r
17         \r
18         x.__apply = this;\r
19         if (!x.__apply) x.constructor.prototype.__apply = this;\r
20         j = y.length;\r
21         switch (j) {\r
22                 case 0: r = x.__apply(); break;\r
23                 case 1: r = x.__apply(y[0]); break;\r
24                 case 2: r = x.__apply(y[0], y[1]); break;\r
25                 case 3: r = x.__apply(y[0], y[1], y[2]); break;\r
26                 case 4: r = x.__apply(y[0], y[1], y[2], y[3]); break;\r
27                 case 5: r = x.__apply(y[0], y[1], y[2], y[3], y[4]); break;\r
28                 case 6: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5]); break;\r
29                 case 7: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break;\r
30                 case 8: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break;\r
31                 case 9: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break;\r
32                 default:\r
33                         a = [];\r
34                         for (i = 0; i < j; ++i)\r
35                                 a[i] = 'y[' + i + ']';\r
36                         r = eval('x.__apply(' + a.join(',') + ')');\r
37                         break;\r
38         };\r
39         // delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;\r
40         // ie5\r
41         if( x === window ){\r
42                 x.__apply = void 0;\r
43         } else {\r
44                 delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;\r
45         };\r
46         return r;\r
47 });\r
48 Function.prototype.call || (Function.prototype.call = function () {\r
49         var a = arguments, x = a[0], y = [], i = 1, j;\r
50         for (j = a.length; i < j; ++i)\r
51                 y[i - 1] = a[i];\r
52         return this.apply(x, y);\r
53 });\r
54 \r
55 Array.prototype.pop || (Array.prototype.pop = function () {\r
56         var r = this[this.length - 1];\r
57         --this.length;\r
58         return r;\r
59 });\r
60 Array.prototype.push || (Array.prototype.push = function () {\r
61         var a = arguments, i = 0, j = a.length, l = this.length;\r
62         for (; i < j; ++i)\r
63                 this[l + i] = a[i];\r
64         return this.length;\r
65 });\r
66 Array.prototype.shift || (Array.prototype.shift = function () {\r
67         var r = this[0], i = 1, j = this.length;\r
68         for( ; i < j; ++i)\r
69                 this[i - 1] = this[i];\r
70         --this.length;\r
71         return r;\r
72 });\r
73 Array.prototype.unshift || (Array.prototype.unshift = function () {\r
74         var a = arguments, l = a.length, j = this.length += l - 1;\r
75         for (var i = j; i >= l; --i)\r
76                 this[i] = this[i - l];\r
77         for (var i = 0; i < l; ++i)\r
78                 this[i] = a[i];\r
79         return j;\r
80 });\r
81 Array.prototype.splice || (Array.prototype.splice = function (x, y) {\r
82         var a = arguments, s = a.length - 2 - y, r = this.slice(x, x + y);\r
83         if (s > 0) {\r
84                 for (var i = this.length - 1, j = x + y; i >= j; --i)\r
85                         this[i + s] = this[i];\r
86         }\r
87         else if (s < 0) {\r
88                 for (var i = x + y, j = this.length; i < j; ++i)\r
89                         this[i + s] = this[i];\r
90                 this.length += s;\r
91         }\r
92         for (var i = 2, j = a.length; i < j; ++i)\r
93                 this[i - 2 + x] = a[i];\r
94         return r;\r
95 });\r
96 \r
97 /*\r
98  * JavaScript 1.6, Array.indexOfを下位互換実装する\r
99  * original\r
100  * http://www.inazumatv.com/contents/archives/7965\r
101  */\r
102 \r
103 Array.prototype.indexOf || (Array.prototype.indexOf = function( searchElement, fromIndex ){\r
104         var l = this.length >>> 0,\r
105                 i = 0;\r
106         if( l === 0 ) return -1;\r
107         \r
108         if( fromIndex ){\r
109             i = fromIndex || 0;\r
110             i = i === -Infinity ? 0 : Math.floor( i < 0 ? -i : i );\r
111             if( l <= i ) return -1;\r
112         };\r
113 \r
114         for( i = 0 <= i ? i : 0 < l + i ? l + i : 0; i < l; ++i ){\r
115             if( this[ i ] === searchElement ) return i;\r
116         };\r
117         return -1;\r
118         });\r
119 \r