1

私は使用して新しいjspウィンドウを開くjavascript関数をwindow.open(...); 持っていますfunction passValues(value);

子ウィンドウでいくつかのことを行い、最終的には次のように値を親 JavaScript に渡します。

window.opener.passValues(value);

'this'関数で使用しようとすると、 を参照しwindow.openerます。

これは私は起こりたくない.. 私は私のこれが私が呼び出す前のこれのままであることを望んでいpassValues functionます。

ご協力ありがとうございました

4

3 に答える 3

1

これは、イベントハンドラーで「this」が呼び出された関数を参照しているために発生します。したがって、参照を作成する必要があります:var self = thisコールバック内。そして、「これ」として「自己」を使用します

于 2012-10-25T12:14:54.903 に答える
0

call子ウィンドウで、 orを使用して親関数を呼び出し、子ウィンドウapplyのスコープを渡すthis

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

または、複数の引数を渡したい場合は、apply を使用します

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

ただし、子スコープ (this) のコンテキストで親関数を呼び出すと、this.value を使用して子ウィンドウのグローバル変数にアクセスできるため、値を渡すことは時代遅れになる可能性があります。

の値はthis、関数呼び出し自体のコンテキストに依存することに注意してthisください。子供にしないでwindowください。インスタンス化されたオブジェクト内から ( を使用してnew) 呼び出す場合も同様で、thischild ではなくクラスのスコープを参照しwindowます。疑わしい場合は、関数を呼び出すスコープのオブジェクトに置き換えthisます。

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

Function.prototype.callまたはで関数を呼び出し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 に答える