みんなのちからになりたい

コピペでブログラムつくっていきたい

console.logを変数に入れられない件

chromeデバッグしてるとき、console.logだと長いんで

var log = console.log;

ってしてたんだけど、「Uncaught TypeError: Illegal invocation」って出て動かないんで、仕方ないので

var log = function (str) { console.log(str) };

こんな感じにして使ってた。
で、やり方まずくてできないのかなと思ってぐぐってみたら、やはりできないっぽい。
同じようなやり方だけどもっとスタイリッシュにやってるひとがいた。

Jxck's OutPut - console.log は長いので

ということで

function log(){ console.log.apply(console, arguments) };
厳密には

function log(){ console.log.apply(console, Array.prototype.slice.call(arguments)) };
これで

log(1, 2, 3);// 1, 2, 3

なるほど、argumentsってすると引数が取れるのか。すごい勉強になる。
気になったのがapplyで、なにするものかまったくわからないのでぐぐった。
いろいろ説明されてるサイトあったけど、なんだかんだでここがいちばんわかりやすかった。

[Javascript]callメソッドとapplyメソッドの基本的な動作 « Codaholic

callとapplyってのがあって、ざっくりいうとthisをcallとapplyの引数で渡したobjectにしてくれるっぽい。
なるほどすごいとは思うけど、正直どういうときに使ったらいいのかよくわからない...
というわけで最終的には同じことだけどなんとなくこうした。

var log = function () { console.log.apply(console, arguments) };

勉強になる。