Javascript:非法调用

我遇到了一个问题。 我正在使用一个相当古老的应用程序,它具有以下逻辑:

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

执行OriginalSubmit时,我得到一个非法的调用参数。 我已经阅读了足够的理解,因为这个引用已经改变了(至少我认为是这种情况),但我正在努力解决的是正确的解决方法。 用于此的JavaScript是乱七八糟的,到处都是JSP和全局函数,所以这样做是非常的努力,所以我想看看是否有机会进行微创解决方案,谢谢。

当您分配OriginalSubmit = Page.submit您正在获取对.submit()函数的引用,但是当您将其称为普通的OriginalSubmit()您将丢失将作为this函数传递给该函数的Page上下文变量。 :

 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元素的方法也可能无法在所有浏览器中移植,并且可能根本不起作用。