失敗話
デバッグに window.alert(breakpoint) な手段を使いますが、都度都度アラートが出るのがうざいので、console.log が使える環境では console.log を使いたい。なので
function log (str) { if (window.console && console.log) { console.log(str); } else { window.alert(str); } } log('hello world');
は、よくやると思います。
だけども、この log関数が頻繁に出てきた場合、毎回 console.log が使えるかを評価するのは、イケてない気がするので、ロードするときに評価しておけばいいんじゃないかと思うわけです。
this.log = function () { return (this.console && console.log) ? console.log : this.alert; } (); log('hello world');
と。
ですが、これだと WebKit系だとうまくいかない
Uncaught TypeError: Illegal invocation
"不正な呼び出しやってんだよ、クソが!" と怒られます。console.log を参照呼び出しするといけないみたいです(要出典)
this.log = function () { return (this.console && console.log) ? function (str) { console.log(str); } : this.alert; }();
なら、怒られません。
が、log関数を呼び出すたびに内部で関数を実行するのはナンセンスで、実際問題使えない
コストパフォーマンス改善という観点では失敗なので、違うところで使えないかなと考えています。