1

我有一个javascript函数,它使用打开一个新的jsp窗口window.open(...); 我还有function passValues(value);

在我的子窗口中,我做了一些事情,最终我会将值传递给我的父 javascript,如下所示:

window.opener.passValues(value);

当我尝试'this'在函数中使用时,它指的是window.opener.

这我不想发生.. 我希望我的 this 仍然是我调用passValues function.

谢谢您的帮助

4

3 回答 3

1

发生这种情况是因为在事件处理程序中“this”指的是调用的函数。所以有必要做一个参考:var self = this在回调内部。并将“self”用作“this”

于 2012-10-25T12:14:54.903 回答
0

Function.prototype.call使用or调用函数Function.prototype.apply

window.opener.passValues.call( this, value );

这将.passValues使用 , 的当前值调用this,以将其固定到当前window对象,只需调用

window.opener.passValues.call( window, value );

.call()并且两者都提供了在调用函数中.apply()设置 *this 上下文变量的值的选项。


参考: .call( ) , .apply()

于 2012-10-25T09:32:22.367 回答
0

call在您的子窗口中,使用or调用父函数apply并使用this

window.opener.passValues.call(this, value);

或者如果您想传递多个参数,请使用 apply

window.opener.passValues.apply(this, [value1, value2]);

但是,如果您在子范围 (this) 的上下文中调用父函数,则可以使用 this.value 访问子窗口的全局变量,因此传递值可能已过时。

请注意, 的值this取决于函数调用本身的上下文...例如,如果您从链接的 onclick 处理程序中调用它(顺便说一句,不要这样做),则指this的是链接的上下文,不给孩子window。当您从实例化对象(使用new)中调用它时也是如此this,指的是类的范围而不是子项window。如有疑问,请替换this为您希望调用该函数的对象的范围。

 window.opener.passValues.call(window, value);
于 2012-10-25T09:50:19.277 回答