2 * ビルトインオブジェクトに拡張したい10のメソッド
\r
3 * http://d.hatena.ne.jp/ofk/20080922/1222047483
\r
6 Function.prototype.apply || (Function.prototype.apply = function (x, y) {
\r
10 if (!x.__apply) x.constructor.prototype.__apply = this;
\r
11 var r, j = y.length;
\r
13 case 0: r = x.__apply(); break;
\r
14 case 1: r = x.__apply(y[0]); break;
\r
15 case 2: r = x.__apply(y[0], y[1]); break;
\r
16 case 3: r = x.__apply(y[0], y[1], y[2]); break;
\r
17 case 4: r = x.__apply(y[0], y[1], y[2], y[3]); break;
\r
18 case 5: r = x.__apply(y[0], y[1], y[2], y[3], y[4]); break;
\r
19 case 6: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5]); break;
\r
20 case 7: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break;
\r
21 case 8: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break;
\r
22 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
25 for (var i = 0; i < j; ++i)
\r
26 a[i] = 'y[' + i + ']';
\r
27 r = eval('x.__apply(' + a.join(',') + ')');
\r
30 delete x.__apply ? x.__apply : x.constructor.prototype.__apply;
\r
33 Function.prototype.call || (Function.prototype.call = function () {
\r
34 var a = arguments, x = a[0], y = [];
\r
35 for (var i = 1, j = a.length; i < j; ++i)
\r
37 return this.apply(x, y);
\r
40 Array.prototype.pop || (Array.prototype.pop = function () {
\r
41 var r = this[this.length - 1];
\r
45 Array.prototype.push || (Array.prototype.push = function () {
\r
46 for (var a = arguments, i = 0, j = a.length, l = this.length; i < j; ++i)
\r
50 Array.prototype.shift || (Array.prototype.shift = function () {
\r
52 for(var i = 1, j = this.length; i < j; ++i)
\r
53 this[i - 1] = this[i];
\r
57 Array.prototype.unshift || (Array.prototype.unshift = function () {
\r
58 var a = arguments, l = a.length, j = this.length += l - 1;
\r
59 for (var i = j; i >= l; --i)
\r
60 this[i] = this[i - l];
\r
61 for (var i = 0; i < l; ++i)
\r
65 Array.prototype.splice || (Array.prototype.splice = function (x, y) {
\r
66 var a = arguments, s = a.length - 2 - y, r = this.slice(x, x + y);
\r
68 for (var i = this.length - 1, j = x + y; i >= j; --i)
\r
69 this[i + s] = this[i];
\r
72 for (var i = x + y, j = this.length; i < j; ++i)
\r
73 this[i + s] = this[i];
\r
76 for (var i = 2, j = a.length; i < j; ++i)
\r
77 this[i - 2 + x] = a[i];
\r
82 * JavaScript 1.6, Array.indexOfを下位互換実装する
\r
83 * http://www.inazumatv.com/contents/archives/7965
\r
86 Array.prototype.indexOf || (Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
\r
88 //throw new TypeError();
\r
90 var t = Object(this);
\r
91 var len = t.length >>> 0;
\r
92 if (len === 0) return -1;
\r
95 if (arguments.length > 1) {
\r
96 n = Number(arguments[1]);
\r
97 if (n != n) { // shortcut for verifying if it's NaN
\r
99 } else if (n != 0 && n != Infinity && n != -Infinity) {
\r
100 n = (n > 0 || -1) * Math.floor(Math.abs(n));
\r
106 var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
\r
107 for (; k < len; k++) {
\r
108 if (t[k] === searchElement) {
\r