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