X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F00_builtin.js;h=8a8f07301f8cddaa1bc6921904e67730201282c6;hb=136b808d09fef278c92b1c1c2cecf67f1383314d;hp=767914f7d8b2d5b16b8408fdd1515f82aa077439;hpb=51e22031f9629d4bc32444a0228930642144ee9e;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/01_core/00_builtin.js b/0.6.x/js/01_core/00_builtin.js index 767914f..8a8f073 100644 --- a/0.6.x/js/01_core/00_builtin.js +++ b/0.6.x/js/01_core/00_builtin.js @@ -10,34 +10,36 @@ */ Function.prototype.apply || (Function.prototype.apply = function (x, y) { - var a, i, r, j; + var apply = '__apply', + a, i, r, j; + x = x || window; y = y || []; // apply 内で apply を呼んだ場合に備える if( x === window ){ - x.__apply = void 0; + x[ apply ] = void 0; } else { - if( x.constructor && x.constructor.prototype.__apply ){ - delete x.constructor.prototype.__apply; + if( x.constructor && x.constructor.prototype[ apply ] ){ + delete x.constructor.prototype[ apply ]; } else - if( x.__apply ) delete x.__apply; + if( x[ apply ] ) delete x[ apply ]; }; - x.__apply = this; - if (!x.__apply) x.constructor.prototype.__apply = this; + x[ apply ] = this; + if (!x[ apply ]) x.constructor.prototype[ apply ] = this; j = y.length; switch (j) { - case 0: r = x.__apply(); break; - case 1: r = x.__apply(y[0]); break; - case 2: r = x.__apply(y[0], y[1]); break; - case 3: r = x.__apply(y[0], y[1], y[2]); break; - case 4: r = x.__apply(y[0], y[1], y[2], y[3]); break; - case 5: r = x.__apply(y[0], y[1], y[2], y[3], y[4]); break; - case 6: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5]); break; - case 7: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break; - case 8: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break; - case 9: r = x.__apply(y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break; + case 0: r = x[ apply ](); break; + case 1: r = x[ apply ](y[0]); break; + case 2: r = x[ apply ](y[0], y[1]); break; + case 3: r = x[ apply ](y[0], y[1], y[2]); break; + case 4: r = x[ apply ](y[0], y[1], y[2], y[3]); break; + case 5: r = x[ apply ](y[0], y[1], y[2], y[3], y[4]); break; + case 6: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5]); break; + case 7: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6]); break; + case 8: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7]); break; + case 9: r = x[ apply ](y[0], y[1], y[2], y[3], y[4], y[5], y[6], y[7], y[8]); break; default: a = []; for (i = 0; i < j; ++i) @@ -49,13 +51,13 @@ Function.prototype.apply || (Function.prototype.apply = function (x, y) { }; // ie5 if( x === window ){ - x.__apply = void 0; + x[ apply ] = void 0; } else { //alert( typeof x ); - if( x.constructor && x.constructor.prototype.__apply ){ - delete x.constructor.prototype.__apply; + if( x.constructor && x.constructor.prototype[ apply ] ){ + delete x.constructor.prototype[ apply ]; } else - if( x.__apply ) delete x.__apply; + if( x[ apply ] ) delete x[ apply ]; }; return r; }); @@ -133,8 +135,42 @@ Array.prototype.indexOf || (Array.prototype.indexOf = function( searchElement, f /* + * JavaScript split Bugs: Fixed! + * http://blog.stevenlevithan.com/archives/cross-browser-split + */ + +/* * Window - * by http://nurucom-archives.hp.infoseek.co.jp/digital/trans-uri.html + * by https://web.archive.org/web/20100413085309/http://nurucom-archives.hp.infoseek.co.jp/digital/trans-uri.html + */ + +/* + * // +// TransURI (UTF-8): transURI.js (Ver.041211) +// +// Copyright (C) http://nurucom-archives.hp.infoseek.co.jp/digital/ +// + +EncodeURI=function(str){ + return str.replace(/[^!#$&-;=?-Z_a-z~]/g,function(s){ + var c=s.charCodeAt(0); + return (c<16?"%0"+c.toString(16):c<128?"%"+c.toString(16):c<2048?"%"+(c>>6|192).toString(16)+"%"+(c&63|128).toString(16):"%"+(c>>12|224).toString(16)+"%"+(c>>6&63|128).toString(16)+"%"+(c&63|128).toString(16)).toUpperCase() + }) +}; + +EncodeURIComponent=function(str){ + return str.replace(/[^!'-*.0-9A-Z_a-z~-]/g,function(s){ + var c=s.charCodeAt(0); + return (c<16?'%0'+c.toString(16):c<128?'%'+c.toString(16):c<2048?'%'+(c>>6|192).toString(16)+'%'+(c&63|128).toString(16):'%'+(c>>12|224).toString(16)+'%'+(c>>6&63|128).toString(16)+'%'+(c&63|128).toString(16)).toUpperCase() + }) +}; + +DecodeURI=function(str){ + return str.replace(/%(E(0%[AB]|[1-CEF]%[89AB]|D%[89])[0-9A-F]|C[2-9A-F]|D[0-9A-F])%[89AB][0-9A-F]|%[0-7][0-9A-F]/ig,function(s){ + var c=parseInt(s.substring(1),16); + return String.fromCharCode(c<128?c:c<224?(c&31)<<6|parseInt(s.substring(4),16)&63:((c&15)<<6|parseInt(s.substring(4),16)&63)<<6|parseInt(s.substring(7),16)&63) + }) +}; */ /* 正規表現が使われているため、まだ投入しない itozyun @@ -229,6 +265,9 @@ if (window.ActiveXObject ? !Number.prototype.toFixed : (!navigator.taintEnabled * web.paulownia.jp - JavaScriptとクロージャ * https://web.archive.org/web/20070526063400/http://web.paulownia.jp/script/oop/closure.html * MacOSX 10.3のsafariにはhasOwnPropertyが実装されていないので、独自に追加する必要があります。 + * + * prototype汚染問題でhasOwnPropertyを使わないクロスブラウザな方法 + * http://os0x.hatenablog.com/entry/20080901/1220272509 */ /* Object.prototype.hasOwnProperty || (Object.prototype.hasOwnProperty = function( p ){