Document.prototypeってIEだと書けないのか

getElementsByTagNameにワイルドカードが使えることを知った。
これで正規表現とか渡したりできたらいいなとか思って、
getElementsByTagNameRegExpとgetElementsByNameRegExpを
作ってみた。

function getElementsByNameRegExp(regExp){
    var elms = document.getElementsByTagName('*');
    var ary = [];
    for(var i = 0; i < elms.length; i++)
        if(elms[i].name && elms[i].name.match(regExp))
            ary.push(elms[i]);
    return ary;
}
function getElementsByTagNameRegExp(regExp){
    var elms = document.getElementsByTagName('*');
    var ary = [];
    for(var i = 0; i < elms.length; i++)
        if(elms[i].tagName && elms[i].tagName.match(regExp))
            ary.push(elms[i]);
    return ary;
}

覚えたてのgetElemntsByTagNameをワイルドカードを使って全エレメントをとって
ループで回して、1つずつ正規表現でマッチングして、マッチしたら配列にいれとく
べたべたな実装。もっと効率のいい実装はないだろうか、、、
2つの関数の違いはnameでマッチングかけるかtagNameでマッチングかけるかの違いだけ。

で、これを、DocumentとElementオブジェクトに追加しようと思って
上の関数のdocument.getElementsByTagName('*');をthis.getElementsByTagName('*');
に変えて

Document.prototype.getElementsByNameRegExp = getElementsByNameRegExp;
Element.prototype.getElementsByNameRegExp = getElementsByNameRegExp;
Document.prototype.getElementsByTagNameRegExp = getElementsByTagNameRegExp;
Element.prototype.getElementsByTagNameRegExp = getElementsByTagNameRegExp;

としたら。FirefoxだといけるんだけどIEだとDocumentとかElementがないよって怒られる。
う〜んIEはDocumentオブジェクトに直接渡せないのか。というかDocumentオブジェクトがないのか?

document.getElementsByNameRegExp = getElementsByNameRegExp;
document.getElementsByTagNameRegExp = getElementsByTagNameRegExp;

とすれば使えるけどElementに追加する方法が思いつかない。
なんかいい方法ってないのかな〜