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
99 * http://www.inazumatv.com/contents/archives/7965
\r
102 Array.prototype.indexOf || (Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
\r
103 if( this == null ){
\r
104 //throw new TypeError();
\r
106 var t = Object(this);
\r
107 var len = t.length >>> 0;
\r
108 if (len === 0) return -1;
\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
115 } else if (n != 0 && n != Infinity && n != -Infinity) {
\r
116 n = (n > 0 || -1) * Math.floor(Math.abs(n));
\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