2011-12-03 21 views
0

我有一個目標聲明是這樣的:爲什麼直接觸發這個函數而不是點擊javascript?

function weapon (id, name){ 
    this.id = id; 
    this.name = name; 
    this.call; 
} 

然後我創建它的一個實例:

someweapon = new weapon (1, 'gun'); 
someweapon.call = function() { //do something }; 

當我創建一個元素:

<img src='...' onclick='someweapon.call()' /> 

supposingly,我會看到一個可點擊的圖像,我可以點擊它來調用該功能。但是,只要顯示圖像,函數(someweapon.call())就會自動調用。

對此的任何解決方案?

+0

也許該函數正在被代碼的其他部分調用,是否可行? – MCSI

回答

2

對我來說你的代碼有效。 .call()方法可能從其他地方被調用。

Here是一個適用於我的代碼片段。

的JavaScript:

function weapon (id, name){ 
    this.id = id; 
    this.name = name; 
} 

someweapon = new weapon (1, 'gun'); 
someweapon.call = function() { alert("called"); }; 

你不需要this.callweapon()內。如果你在那裏定義它,它仍然值undefined。您還可以在weapon()內寫this.call = function() { alert("called"); };,這意味着它可以通過weapon的每個實例訪問,而不僅僅通過someweapon訪問。

HTML:

<img src='http://jsfiddle.net/img/logo.png' onclick='someweapon.call()' /> 

編輯湯姆賈裏德Farrish有一個好點。對於功能,call()已經是defined。您正在爲對象定義.call(),而不是函數,因此沒有任何內容(理論上)會被覆蓋,但最好不要使用這樣的名稱,因爲它可能會造成混淆。將.call()重命名爲其他內容。

+1

它也似乎在FF8爲我工作:http://jsfiddle.net/hNWP6/ –

+0

@JaredFarrish是的,這是一個很好的觀點。 – kubetz

+0

我刪除了重寫'.call()'的引用,同時我再仔細查看一下。我仍然認爲這樣做是一個糟糕的主意,至少令人困惑。 ([MDN參考](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call)) –

相關問題