OSDN Git Service

Version 0.6.11, add XUI_Gesture.
[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  * http://www.inazumatv.com/contents/archives/7965\r
100  */\r
101 \r
102 Array.prototype.indexOf || (Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {\r
103         if( this == null ){\r
104             //throw new TypeError();\r
105         };\r
106         var t = Object(this);\r
107         var len = t.length >>> 0;\r
108         if (len === 0) return -1;\r
109         \r
110         var n = 0;\r
111         if (arguments.length > 1) {\r
112             n = Number(arguments[1]);\r
113             if (n != n) { // shortcut for verifying if it's NaN\r
114                 n = 0;\r
115             } else if (n != 0 && n != Infinity && n != -Infinity) {\r
116                 n = (n > 0 || -1) * Math.floor(Math.abs(n));\r
117             }\r
118         }\r
119         if (n >= len) {\r
120             return -1;\r
121         }\r
122         var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\r
123         for (; k < len; k++) {\r
124             if (t[k] === searchElement) {\r
125                 return k;\r
126             }\r
127         }\r
128         return -1;\r
129         });\r
130 \r