Chrome 18 betaで次のコードを実行すると、エラーが発生します。
console.log.apply(this, ['message']);
TypeError:不正な呼び出し。
Firefox 10では、期待どおりに機能します。
IE9ではエラーが発生します:Object doesn't support property or method 'apply'
。
これは、ブラウザがどのように実装したかに関係していると思いますconsole.log
。
なぜFirefoxで動作するのに、ChromeおよびIEでは動作しないのでしょうか?.
これは 実行可能サンプル JS Binにあります。
console
とlog
はHostオブジェクトです。それらの動作は実装依存であり、ECMAScriptのセマンティクスを実装するために大部分は必要ありません。
FWIW、あなたのjsBinはあなたがそれを変更しない限りChromeでも失敗します...
console.log.apply(console, ['message']);
しかし、それはlog
がconsole
の呼び出しコンテキストを単純に予測しているようです。
これが代替ソリューションです。引数がない場合が期待どおりに動作するかどうかはわかりません。
function logr(){
var i = -1, l = arguments.length, args = [], fn = 'console.log(args)';
while(++i<l){
args.Push('args['+i+']');
};
fn = new Function('args',fn.replace(/args/,args.join(',')));
fn(arguments);
};
logr(1,2,3);
logr();
logr({},this,'done')