我遇到了问题。我正在使用一个相当古老的应用程序,它具有以下逻辑:
var Page;
var OriginalSubmit;
function init() {
Page = document.forms[0];
OriginalSubmit = Page.submit;
Page.submit = newPageSubmit;
}
function newPageSubmit() {
validate();
OriginalSubmit();
}
执行OriginalSubmit时,我收到一个非法的调用参数。我已经阅读了足够的理解,因为这个引用已经改变了(至少我认为是这种情况),但我正在努力解决的是正确的解决方法。用于此的JavaScript是乱七八糟的,随处可见JSP和全局函数,所以这样做是非常的努力,所以我很想看看是否有机会进行侵入性较小的解决方案,谢谢。
答案 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元素的方法也可能无法在所有浏览器中移植,并且可能根本不起作用。