2012-05-22 53 views
2

什麼會導致IE7中出現這種行爲?我無法在jsfiddle上重現此問題...IE7新函數返回對象而不是函數

var func=new Function('arg','return 2*2;'); 
alert(typeof func); 

返回對象。

我很困惑。

如何調試此問題?如何弄清楚爲什麼新的函數返回一個對象?

UPDATE

它不應該是正確的呀?或者我只是不明白什麼?對我來說,它看起來像Windows 8的錯誤。

https://www.dropbox.com/s/mhyuab3mhj2yu59/ie7_windows8_bug.png

UPDATE

這是達IE8,IE9中就不見了。

+0

當然,它sh應該返回「功能」。但是,這裏需要調試什麼? – Jon

+0

你不能正常創建一個函數嗎? – Joseph

+0

我沒有IE7,但是我在IE9的IE7模式下獲得了'功能'。 – xdazz

回答

0

問題通過解決此解決方案:

var func=eval('(function(){return function(){ your code here }})()'); 
1

我不能在我的機器上覆制這個,而你的權利 - 這是錯誤的。根據EMCA specs,對於typeof運營商,所有callable應返回function。如果你想測試一個給定的變量是否是在這個問題上面對的功能,你可以使用:

function isFunction(func){ 
    return typeof func === 'function' || 
      (typeof func === 'object' && func instanceof Function); 
} 
+0

它顯示func是Function的實例,但它的類型是object。 – Somebody

+0

是的,所以return語句的第二部分將選擇這種情況。我猜測它仍然是一個功能,它可以像一個一樣執行和使用。 –

+0

https://www.dropbox.com/s/mhyuab3mhj2yu59/ie7_windows8_bug.png它會拋出異常 – Somebody

0

延長Mark Rhodes答案

function realType(t) { 
    return Object.prototype.toString.call(t).slice(8, -1); 
}; 

var func=new Function('arg','return 2*2;'); 

alert(realType(func)); // Function/Object 
alert(realType([])); // Array 
alert(typeof []) // object 

alert(realType(new Date)); // Date 
alert(typeof (new Date)); // object 
+0

realType(new Function('x,y','return x * y;')); - >「對​​象」 – Somebody

+0

@貝克好吧,這是一個遠射。感謝您的測試..對不起,不工作:( – andlrc