2012-12-06 26 views

回答

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理念上Link ,也從@jasonbunting上Link

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方法讓你執行一個功能,並宣佈其範圍。如果這對你有用,應該很容易重構你的循環場景。

相關問題