有人可以幫我嗎?Javascript:我怎樣才能'宣佈'一個函數而不需要調用它?
下面的代碼工作,但不幸的是一個函數調用DoSomething的()是必要的:
<body onload=init()>
</body>
<script>
function Startscreen()
{
this.doSomething(); //why is this call necessary and how else to solve it?
this.startscreenhtml =
" <form onsubmit=doSomething()> " +
" <input type=text /> " +
" </form> ";
document.write(this.startscreenhtml);
}
Startscreen.prototype.doSomething = function()
{
alert(123)
}
</script>
<script>
function init()
{
var startscreen = new Startscreen();
}
</script>
我也想保持功能DoSomething的作爲對象啓動畫面的功能。
編輯:我想使用document.write
Preferrably我要聲明,我現在所做的構造之外DoSomething的保持,因爲我相信,否則的話我會叫新的啓動畫面多次,該相同的功能被創建多次。
但是,我嘗試了很多事情,使得這個工作沒有調用doSomething,包括聲明構造函數內的函數,但沒有任何工作。 我的猜測是,調用是必要的,使功能已知,因爲如果代碼是自上而下讀取,我即時分配給'onsubmit'之前我宣佈它。
有人知道如何解決這個問題嗎?
非常感謝這個解決方案,雖然它並不像您說的那樣理想,我不想事先知道我會做什麼變數名稱。然而,起初你說我的doSomething函數在我提交表單時不會被調用......但它會是......?只是在創建表單時(這是我想擺脫的副作用)。希望你會回覆,並感謝評論 – Jeroen
順便說一句,我得到你的解釋關於沒有一個(引用一個)實例留在當事件處理程序做它的事情,但仍然代碼工作(我測試它在鉻)。所以也許最初的呼叫(我想要一個不同的解決方案)使得這個實例在全局範圍內已知 - 明確地說 - 或者將函數提升到全局水平..或者我不知道我只是在猜測,但它仍然有效......在我的原始文章中的代碼,doSomething將被調用時,我提交 – Jeroen
@Jeroen:我不明白'onsubmit'事件可能如何調用該方法。調用方法不註冊是全局範圍內的一項功能。你必須在頁面中的某處添加更多的代碼才能實現。無論如何,我在如何從沒有全局變量的事件處理程序中獲取方法的問題上增加了一些更多內容。 – Guffa