我需要通過JSON傳輸JavaScript對象並傳輸它的功能。我找到了一個獲取函數字符串並將其轉移的工作版本。然後我可以再次評估它們。在IE8中評估傳輸功能
//Create the function
var myFunction = function(){alert('Hello, my Function!');}
//get the functions String reprensentation
var myFunctionTransferString = myFunction.toString();
//Now we transfered the object and want to have a function back
var myTransferedFunction = eval('(' + myFunctionTransferString + ')');
//call the transfered function
myTransferedFunction();
在這裏,我有這樣一個的jsfiddle:http://jsfiddle.net/bMjug/
這是在Firefox,Chrome和Safari的工作,因爲它應該(但你可以在微軟的軟件,極大pieace所謂的Internet Explorer無法猜測)。
在我想要評估函數的線上,我在IE8中收到消息fn is null or not an object
。
其實我找到了解決方案,但我真的不喜歡這個解決方案。如果我把變量聲明爲字符串我評價一個因爲我不期待的對象中刪除的括號了,會做什麼,我想:
eval('var myTransferedFunction = ' + myFunctionTransferString);
,但我覺得這樣的黑客入侵,壞的解決方案。
有沒有人現在對這個問題更好?
在此先感謝
「的toString()」 我的函數對象上調用始終調用在ECMA腳本引擎在我的服務器上。所以我可以依靠字符串表示將永遠是它應該是。我只將它用於小型處理程序,因此在那裏不會有複雜的東西。你可能有一個鏈接來解釋FunctionDeclaration和FunctionExpression之間的區別嗎? – Chris 2011-04-09 16:54:19
查看http://kangax.github.com/nfe/的介紹(儘管注意到「函數表達式:歸因於分組操作符」的例子正是你不會發生的事情,由於IE錯誤)。 – bobince 2011-04-09 22:22:35
是的,這是一個很好的例子。但是這表明,一個函數表達式應該是一個函數表達式,它應該返回一個函數對象,我是對嗎? – Chris 2011-04-12 14:50:56