2016-07-03 9 views
0

私はあなたがモンスターを攻撃できる小さなRTSゲームを持っています。ゲームをロードしたり起動したりするときに、strike()関数が3秒後に起動するように設定します。しかし、私がこのコードを実行すると、 "strike()"が関数ではないという型エラーが発生します。その関数でなければ、それは何ですか?JS:あなたの機能は機能ではありません! TypeError

player.ccが意味するものは、現在の文字を表します。残りの部分は私が試合中に持っているバランス計を指しています。助けるかもしれ

dom.el("strike").onclick = function strike() { 
    HitCalc(player.cc, monster.cc); 
    actor.expCounter(player.cc); 
    actor.balanceCounter(player.cc, monster.cc); 
}; 

setTimeout(strike(), 3000); 

追加コード:

dom = { 
    el: function (id){ 
     return document.getElementById(id); 
    }, 

HTML:

<button id="strike" type="button" class="buttons">Strike</button> 
+4

'のsetTimeout(ストライキ、3000);' –

+0

私はそれを試してみましたが、これが起こっ: にSyntaxError:欠落している]要素リスト 後の[オブジェクトHTMLButtonElement] – Shawn

+2

@squintもっと面白いことが起こっているので、これは実際には重複していません。もちろん 'setTimeout(strike()、3000)'は明らかな問題ですが、名前付き関数式の使い方も間違っています。 – dfsq

答えて

2

あなたは、イベントハンドラに割り当てられた名前持つ機能はまだ掲揚とで宣言されていると思いますがあなたの現在のスコープ、あなたはこの部分で間違っています:それはまだ匿名のインライン関数のようなプロパティに割り当てられた関数です。あなたが必要なもの

はこれです:

function strike() { 
    HitCalc(player.cc, monster.cc); 
    actor.expCounter(player.cc); 
    actor.balanceCounter(player.cc, monster.cc); 
}; 

dom.el("strike").onclick = strike; 

// Note that setTimeout expects a reference to the function rather than 
// a function call!! 
setTimeout(strike, 3000); 
+0

ありがとう!私は、私がその問題をかなり説明している範囲外であったことに気づいていませんでした。ありがとうございます。 :) – Shawn

+0

@ user2763154問題ありません! ;) –

関連する問題