0

重複
の可能性: ログと呼ばれる場合、Chrome は console.log を認識しません

メソッドを に設定したときにこれが機能しない理由を誰か教えてもらえますconsole.logか?

var met = "console.log";
var msg = "HELLO WORLD";
var n = met.split(".");
var f = this;
$.each(n, function(k, v){
    f = f[v];
});
f(msg);

これは私が使ってみたときにうまくいくようですalert

4

2 に答える 2

1

これは、コンソールのログ関数がf変数に割り当てられるためですが、実行されると、コンソールスコープへの参照がなくなります。Javascriptのスコープは、コールバックを処理したり、関数を渡したりするときに注意が必要になる場合があります。

@Muraliのコメントによると、一部のブラウザは他のブラウザとは異なる方法でconsole.logメソッドを実装しています。

実験として、このコードを実行してみて、機能するかどうかを確認してください。

var met = "console.log";
var msg = "HELLO WORLD";
var n = met.split(".");
n[1].call(n[0], msg);

この.callメソッドを使用すると、関数を実行してそのスコープを宣言できます。それがうまくいけば、ループシナリオを簡単にリファクタリングできるはずです。

于 2012-12-06T06:26:11.563 に答える
0

解決しました。

var met = "console.log";
var msg = "HELLO WORLD";
var n = met.split(".");
var tail = n.pop();
var f = this;
$.each(n, function(k, v){
    f = f[v];
});
var func = function(){ f[tail].apply(f, arguments); }
func(msg);

これが Chrome、Firefox、Opera、および Safari で動作することをテストしました。IE9では動かないようです。

リンクの @muistooshort とリンクの @jasonbunting からアイデアを得ました。

于 2012-12-06T07:20:54.600 に答える