2014-01-24 47 views
0

我遇到問題。我有一個相當老的應用程序,它具有以下邏輯工作:Javascript:非法調用

var Page; 
var OriginalSubmit; 

function init() { 
    Page = document.forms[0]; 
    OriginalSubmit = Page.submit; 
    Page.submit = newPageSubmit; 
} 

function newPageSubmit() { 
    validate(); 
    OriginalSubmit(); 
} 

當執行OriginalSubmit,我得到一個非法調用參數。我已經閱讀了足夠的理解,因爲這個引用已經改變了(至少我認爲是這種情況),但是我正在努力的是修正它的正確方法。對於這個JavaScript來說是一團糟,隨處可見JSP和全局函數,所以要做到這一點是非常努力的,所以我懶惰地想知道是否有機會使用侵入性較小的解決方案,謝謝。

+1

OriginalSubmit = Page.submit.bind(Page) – dandavis

回答

1

當分配OriginalSubmit = Page.submit你獲得對.submit()函數的引用,但是當你調用它只是簡單的OriginalSubmit()你失去了Page情境變量會this傳遞給函數:

myObject.method(); // calls "method" with "this === myObject" 

var method = myObject.method(); 
method();   // calls "method" with "this === window" 

相反,使用這樣的:

OriginalSubmit.call(Page); // sets "this" to "Page" 

注意,即使在當時,它可能是重新分配一個本地DOM元素的方法並不適用於所有的瀏覽器可移植工作s,可能根本無法工作。

+0

感謝您的迴應,這似乎工作。我意識到這不是正確的解決方案,但考慮到這個網站的性質,這可能是現在的方式。 – Delmania