3

JavaScript でのオブジェクトの操作に問題があります

私のコード:

SearchField = function(){
this.Init = function()
{
    this.input = this.view.getElementsByTagName("input");
    this.input[0].onkeyup = this.UpdateEvent2;
    self = this;                        
}

this.UpdateEvent = function(){
    this.OnUpdate();
}

this.UpdateEvent2 = this.UpdateEvent.bind(this);

this.OnUpdate = function(){
    alert("Hello world from direct object");
};  

}

このコードの説明: bind メソッドを使用して、イベント オブジェクトの代わりにオブジェクト自体を引数として渡しました。そのため、内部にいくつかのコードを含む関数 OnUpdate があります。

コードの他の部分でオブジェクトをインスタンス化した後、他の行がいくつかあります。

...
targetController.prototype[targetMethodName] = function(targetController){
alert("core");
return selfController[selfMethodName](targetController);
}
...

targetController はオブジェクトへの参照であり、targetMethodeName はメソッド OnUpdate() です。次に、このメソッドに新しい関数を割り当てようとします。つまり、元のメソッド OnUpdate を別のオブジェクトの別のメソッドに置き換えようとします。(alert("core") を呼び出しても、いずれにせよ機能しないため、問題はありません)。

したがって、このメソッドを次のように呼び出そうとすると: MyObject.OnUpdate() - 結果は、「Hello world from direct object」というアラート ウィンドウです。

最初の質問は、このメソッドを別のメソッドに置き換えるにはどうすればよいですか?

しかし、このメソッドを次のようにイベント ハンドラーに直接割り当てると、いくつかの興味深い動作が発生します。

SearchField = function(){
this.Init = function()
{
    this.input = this.view.getElementsByTagName("input");
    this.input[0].onkeyup = this.OnUpdate;
    self = this;                        
}


this.OnUpdate = function(){
    alert("Hello world from direct object");
};  

}

この場合、すべてが完全に機能するため、「コア」が内部にあるアラートウィンドウと、別のオブジェクトの別のメソッドが正しい引数で呼び出されます...

では、2 番目の質問は ... 最初のバリアントの何が問題なのか??? メソッドをイベント ハンドラに直接割り当てたくありません。コードの任意の部分でこのメソッドを呼び出したい! これを行う方法?

PS ご覧のとおり、 this の代わりに self を使用してこれを実行しようとしました...何も役に立ちません!

4

1 に答える 1