map、filterなどを使う時の便利な関数(__noSuchMethod__)
Array#mapなどを使う時、配列の要素に対して要素のメソッドを適用したいことがよくあるけど、普通はこう書かなきゃいけない。
[1, 2, 3, 4, 5].map(function (n) { return n.toString() });
こう書きたい。
[1, 2, 3, 4, 5].map(expand.toString()); // expandが1, 2, 3, 4, 5に置換されるようなイメージ
下のようにすれば、単にメソッドを適用したい時にいちいち無名関数を書かなくてよくなる。
var expand = { __noSuchMethod__: function __noSuchMethod__(prop, args) function (parent) parent[prop].apply(parent, args) }; "__defineGetter__ __defineSetter__ hasOwnProperty\ isPrototypeOf __lookupGetter__ __lookupSetter__\ __parent__ propertyIsEnumerable __proto__ toSource\ toString toLocaleString unwatch valueOf watch".split(" ") .forEach(function (prop) { expand[prop] = function () expand.__noSuchMethod__(prop, arguments); }); var cookies = document.cookie.split(";").map(expand.split("=")); //[["name", "javascripter"], ["last", "1222896080467"], ["token", "4jfe8rn3nr0x"], ["expires", "Thu, 01 Jan 1970 00:00:00 GMT"]] cookies.map(expand.join("=")).join(";"); // "name=javascripter;last=1222896080467;token=4jfe8rn3nr0x;expires=Thu, 01 Jan 1970 00:00:00 GMT" function I(o) o; Array.map(document.querySelectorAll("div"), expand.querySelector("a")).filter(I); //[a, a, a, a.autopagerize_link javascript:void(0), a.autopagerize_link javascript:void(0), a]
便利。