Javascript:非法调用

时间:2014-01-24 22:29:52

标签: javascript jquery

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

var Page;
var OriginalSubmit;

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

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

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

1 个答案:

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