我在JavaScript中使用对象的操纵问题的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。 (它并不是无论如何都不工作,即使调用alert(“核心”)。)
所以,当我尝试调用这样的方法:MyObject.OnUpdate() - result is带有“来自直接对象的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");
};
}
在这种情况下,一切完美的作品,所以我有一个警告窗口“核心“内部和另一个方法从另一个对象调用正确的参数...
所以,第二个quastion是......第一个变种有什么错?我不想将我的方法直接分配给事件处理程序!我想在我的代码的任何部分调用这个方法!这个怎么做?
P.S.正如你所看到的,我试图用自己而不是这个来做这个,等等......没有什么帮助!
有一件事我不明白的是你把新方法上targetController.prototype而不是实例本身。 –
Grape_mao,在这些行之前该对象已经创建,但没有被Init()方法初始化,所以我将新方法放到具体对象的实例中,而不是放到类对象或targetController.prototype中。但之后的事件处理程序设置!通过调用Init()方法。这是做'当然,如果我以前调用Init,它会始终指向初始函数,即使我在第二个变体中做这个替换! –
我还是不明白......这是你想要做的吗? http://jsfiddle.net/m5XYe/ –