Javascript:非法调用

Javascript:非法调用,javascript,jquery,Javascript,Jquery,我遇到了一个问题。我正在使用一个相当旧的应用程序,它具有以下逻辑: var Page; var OriginalSubmit; function init() { Page = document.forms[0]; OriginalSubmit = Page.submit; Page.submit = newPageSubmit; } function newPageSubmit() { validate(); OriginalSubmit(); } 当执行

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

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
传递给该函数的
页面
上下文变量:

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

OriginalSubmit=Page.submit.bind(Page)感谢您的响应,这似乎确实有效。我意识到这不是正确的解决方案,但考虑到这个网站的性质,这可能是目前的做法。