2009-12-01 52 views
0

假設我有以下形式的javascript函數:的Javascript澆鑄到功能

function(){alert("blah");} 

假設我也有小應用程序,其具有所謂的doStuff方法,該方法的函數作爲參數:

MyApplet.doStuff(function(){alert("blah");}); 

現在假設小程序根據其計算結果將函數傳遞給成功或失敗的JavaScript回調函數。在該回調函數,我要執行的功能,使用戶得到我非常翔實的「嗒嗒」的消息:

function callback(func) { 
    func(); 
} 

然而,在上面的例子中,FUNC不再被認爲是「Function」類型的(typeof func將返回「object」)。是否有可能將func轉換爲函數以便執行?我腦海中有許多黑客可以給我我想要的東西,但他們非常難看,我希望我錯過了一些簡單的東西。

任何幫助,非常感謝。

+0

我不明白。 'callback'本身如何傳遞? – 2009-12-01 18:09:10

+0

applet傳遞的這個對象的內容是什麼?你可以檢查它在螢火蟲?如果它有'call()'或'apply()'函數,你可以嘗試調用它們。 – 2009-12-01 18:11:01

+0

回調函數本身的名稱作爲參數傳遞給小程序。從那裏,我使用java插件(netscape.javascript.JSObject)中的JSObject來調用它並傳遞一個包含參數的對象數組。 – 2009-12-01 19:10:12

回答

2

嘗試func.call()

+1

如果這樣,那麼'typeof func'將會是''function'',而不是''object'',就像在OPs場景中一樣。 – 2009-12-01 19:07:49

+0

我試過func.call()和func.apply(),都沒有工作。 – 2009-12-01 19:10:57

+0

你是否已經通過FireBug(或其他一些調試器)的代碼?您上面的陳述表明您的功能不應轉換爲對象;確切知道這個功能何時停止是一種功能可能是有啓發性的。 – Upperstage 2009-12-01 19:34:16

2

使用相同的代碼風格,你已經有了,下面應提醒 「叫!」:

function callback(func){ 
    func(); 
} 
callback(function(){ 
    alert("called!"); 
}); 

是MyApplet.doStuff(函數(){警報( 「嗒嗒」);});肯定將其參數傳遞給回調函數保持不變?

+0

是的,從applet到回調函數,參數在內容方面沒有變化。唯一的變化是現在JavaScript將它解釋爲一個對象而不是一個函數。 – 2009-12-01 19:12:11

0

我選擇了一種不像我想象的那樣醜陋的解決方案。 JSObject.call()java方法將所有回調函數參數轉換爲純jane對象。因此,而不是傳:

function(){alert("blah")} 

我現在傳:

alert("blah") 

或之後一些討厭的轉義:

''alert(\''blah\'');'' 

沒那麼可怕吧?非常感謝所有提供幫助的人,非常感謝。但是,出於好奇,是否有人知道如果可以通過JSObject將某些內容從java傳遞給javascript函數,從而保留其「函數」類型?