我在 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");
};
}
对此代码的一些解释:我使用绑定方法将对象本身作为参数传递,而不是事件对象。所以,我有一个函数 OnUpdate,里面有一些代码。
在我的代码的其他部分实例化我的对象后,我还有其他一些行:
...
targetController.prototype[targetMethodName] = function(targetController){
alert("core");
return selfController[selfMethodName](targetController);
}
...
其中 targetController 是对我的对象的引用,而 targetMethodeName 是方法 OnUpdate()。然后我尝试为这个方法分配一个新函数,换句话说,尝试用另一个对象的另一个方法替换原始方法 OnUpdate。(它不会满足,因为它无论如何都不起作用,甚至调用警报(“核心”)。)
因此,当我尝试像这样调用此方法时: MyObject.OnUpdate() - 结果是一个带有“来自直接对象的 Hello world”的警报窗口。
第一个问题是如何用另一种方法代替这种方法?
但是,如果我像这样直接将此方法分配给事件处理程序,则会出现一些有趣的行为:
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");
};
}
在这种情况下,一切正常,所以我有一个警报窗口,里面有“核心”,另一个对象的另一个方法用正确的参数调用......
所以,第二个问题是......第一个变体有什么问题???我不想将我的方法直接分配给事件处理程序!我想在我的代码的任何部分调用这个方法!这个怎么做?
PS 如您所见,我尝试使用 self 而不是 this 等等...没有任何帮助!