あなたのコードで:
> var dbi = document.body.innerHTML;
innerHTML
は値が文字列のプロパティであるため、dbi に割り当てられる値は文字列プリミティブです。
> document.body.innerHTML=function () {
body 要素はホスト オブジェクトです。関連する標準によれば、文字列である必要があるプロパティに関数オブジェクトを割り当てることができると信じる理由はありません。一部の環境では可能かもしれませんが、依存することはできず、使用中の少なくとも一部のブラウザーでは失敗します。
> var elem = dbi.apply (document, arguments);
dbi
は文字列プリミティブで、apply メソッドはありません。
> console.log(arguments);
> }
編集
ES5では、 getterを定義できます。
var o = {
get pageURI () {
return document.location.href;
}
}
あなたができるように:
alert(o.pageURI);
document.location = document.location.href + '#foo';
alert(o.pageURI); // current URI with #foo appended
しかし、一般的な Web で ES5 に依存するべきではありません。多くのブラウザーはまだ完全にサポートしていません。