2 * ビルトインオブジェクトに拡張したい10のメソッド
\r
3 * http://d.hatena.ne.jp/ofk/20080922/1222047483
\r
6 Function.prototype.apply || (Function.prototype.apply = function (x, y) {
\r
11 // apply 内で apply を呼んだ場合に備える
\r
15 delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;
\r
19 if (!x.__apply) x.constructor.prototype.__apply = this;
\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
34 for (i = 0; i < j; ++i)
\r
35 a[i] = 'y[' + i + ']';
\r
36 r = eval('x.__apply(' + a.join(',') + ')');
\r
39 // delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;
\r
44 delete x.__apply ? x.__apply : x.constructor.prototype.__apply ;
\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
52 return this.apply(x, y);
\r
55 Array.prototype.pop || (Array.prototype.pop = function () {
\r
56 var r = this[this.length - 1];
\r
60 Array.prototype.push || (Array.prototype.push = function () {
\r
61 var a = arguments, i = 0, j = a.length, l = this.length;
\r
66 Array.prototype.shift || (Array.prototype.shift = function () {
\r
67 var r = this[0], i = 1, j = this.length;
\r
69 this[i - 1] = this[i];
\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
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
84 for (var i = this.length - 1, j = x + y; i >= j; --i)
\r
85 this[i + s] = this[i];
\r
88 for (var i = x + y, j = this.length; i < j; ++i)
\r
89 this[i + s] = this[i];
\r
92 for (var i = 2, j = a.length; i < j; ++i)
\r
93 this[i - 2 + x] = a[i];
\r
98 * JavaScript 1.6, Array.indexOfを下位互換実装する
\r
100 * http://www.inazumatv.com/contents/archives/7965
\r
103 Array.prototype.indexOf || (Array.prototype.indexOf = function( searchElement, fromIndex ){
\r
104 var l = this.length >>> 0,
\r
106 if( l === 0 ) return -1;
\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
114 for( i = 0 <= i ? i : 0 < l + i ? l + i : 0; i < l; ++i ){
\r
115 if( this[ i ] === searchElement ) return i;
\r