new Stringの用途を考え、ユニークなキーを生成するgensymを書いた。toString()があるのでobjectのキーとして使用でき、オブジェクトなので===で比較する時は絶対に重ならない。
var gensym = function () { var prefix = 'gensym_'; var id = 0; return function () { var str = prefix + id++; return new String(str); }; }(); var JSONP = function (url, callback) { var script, head, sym; sym = gensym(); script = document.createElement('script'); script.type = 'text/javascript'; script.src = url + '&callback=' + encodeURIComponent(sym); head = document.getElementsByTagName('head').item(0); head.appendChild(script); window[sym] = function () { delete window[sym]; head.removeChild(script); callback.apply(this, arguments); }; } var _ = gensym(); Function.prototype.cut = function () { var self = this, tmpl = arguments; return function () { var args = arguments; return self.apply(self, Array.prototype.map.call(tmpl, function (o) { return o === _ ? Array.prototype.shift.call(args) : o; })); }; };