2014-08-28 65 views
0

不要在這裏自學,看起來應該是明顯的問題。使用函數作爲對象屬性在頁面加載時運行,但在被調用時不運行

我正在製作一個遊戲,其中角色(可移動圖像)觸摸屏幕上的許多圖像之一,並且當按下某個按鍵時,將會運行特定於正在觸摸的圖像的功能。

我創建了一個對象,其中有幾個屬性定義了圖像的位置等,最後一個參數是一個函數(作爲一個對象屬性的函數稱爲方法,對嗎?)。這裏的對象:

var obj1 = {xleft:0, xright:800, ytop:0, ybottom:500, action:"Test", text:"Whoop whoop", func:alert('Eureka!')};

所以,當我的性格是這些參數(觸摸物體)內的按鍵,該功能運行:

function action(){ document.getElementById('Text').innerHTML = obj1.text; obj1.func(); }

當按鍵被按下,文本顯示應該是,但功能不運行(更具體地說,在這個化身中,該功能在屏幕加載時運行,這不是我想要的)。我嘗試了其他幾種可能性,但沒有任何成效。

任何人都可以幫忙嗎?

+0

只是調用屬性「func」不會使賦值的值 - 這是* evaluate *(alert('Eureka!')')表達式的結果 - 是一個函數。換句話說,代碼大致相當於'var result_of_alert = alert('Eureka!'); var obj1 = {func:result_of_alert};',這應該使問題更加明顯。 – user2864740 2014-08-28 21:38:24

+0

我不確定我的理解。我猜你在說我需要在我的「函數操作」中輸入一些代碼來運行func alert,而不是在那裏說明它,但這就是我所要求的。如何通過函數動作來運行obj1.func? – Truth 2014-08-28 21:39:35

+0

非常。分配一個真實函數,而不是調用一個函數的(未定義值)結果:'var obj1 = {func:function(){alert('Wheee!')}}'。將'function(){..}'作爲表達式的結果返回一個函數對象,該函數對象是一個函數,可以稍後調用(例如'obj1。FUNC()')。請參閱http://stackoverflow.com/questions/111102/how-do-javascript-closures-work?rq=1 etc. – user2864740 2014-08-28 21:40:22

回答

0

問題是這樣的:func:alert('Eureka')未將屬性分配給func屬性。

這是你可以做的一種方式:

function theFunction(message) { 
    alert(message); 
} 

var obj1 = { 
    xleft:0, 
    xright:800, 
    ytop:0, 
    ybottom:500, 
    action:"Test", 
    text:"Whoop whoop", 
    message: 'Eureka!', 
    func: theFunction 
}; 

function action(){ 
    document.getElementById('Text').innerHTML = obj1.text; 
    var message = obj1.message; 
    obj1.func(message); 
} 
0

func:alert('Eureka!')更改爲func:function(){alert('Eureka!');}

+3

如果您僅提供了有關**爲什麼** OP發生問題的更多信息,以及爲什麼您必須改變它,這個答案可以被接受 – Tyblitz 2014-08-28 21:32:00

+0

我試過這個解決方案,它沒有工作... – Truth 2014-08-28 21:37:28

+0

對不起,我不得不離開前我試圖給出答案(即使它必須是一個快速一個),但似乎已經太晚了,另一個答案已被接受,否則我會解決它。 – Blubberguy22 2014-08-29 12:34:28

0

bubberguy22的答案和諾姆是正確的。

bubberguy22是Noam的一個捷徑。 Noam使用所謂的匿名函數。 這意味着它是一個直接分配給對象屬性的函數。您將無法通過它的名稱調用該函數...因爲...它沒有一個。

其中匿名函數不可取的情況之一是當您想要將函數分配給對象的多個屬性時。例如:

function theFunction(message){alert(message); }

VAR OBJ1 = {xleft:0,Xright確定:800的y top:0,ybottom:500,行動: 「測試」,文: 「高呼吶喊」,郵件: '尤里卡' 的onClick:theFunction, onHover:theFunction};

+0

我想你的意思是Blubberguy22的答案是利用匿名函數,而不是我的答案。 – Noam 2014-09-14 02:40:49

相關問題