Object.prototype.forEach

大昔の「prototype.js の Object 汚染」を思い出した。

後に追記されたようだが、 Array.forEach に倣ってきちんと書くとこうなる。

(function(global) {
    Object.prototype.forEach = function(callback, context) {
        context = context == undefined ? global : context;
        for (var key in this)
            if (this.hasOwnProperty(key))
                callback.call(context, this[key], key, this);
    };
})(this);

ちなみに context == undefinedcontext === undefined || context === null と等価。

Object を連想配列として使うときはここで定義した forEach を使えばいいわけで、 Object.prototype を拡張しても問題ないだろう、と思って某ライブラリを見たらそこら中で for in を使っていた。Object.prototype 汚染プルーフなライブラリを広めれば Object を拡張でき開発効率が上がるだろうし、その方向に持っていきたい。