我在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方法将Object本身作为参数传递,而不是事件对象。 所以,我有一个函数OnUpdate,里面有一些代码。
在我的代码的其他部分实例化我的对象后,我还有其他一些行:
...
targetController.prototype[targetMethodName] = function(targetController){
alert("core");
return selfController[selfMethodName](targetController);
}
...
其中targetController是对象的引用,targetMethodeName是OnUpdate()方法。然后我尝试为这个方法分配一个新函数,换句话说,尝试用另一个对象中的另一个方法替换原始方法OnUpdate。 (它无论如何都不会“无论如何都无法工作,甚至调用警报(”核心“)。)
所以,当我尝试像这样调用这个方法时:MyObject.OnUpdate() - result是一个警告窗口,其中包含“来自直接对象的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");
};
}
在这种情况下,一切都运行良好,所以我有一个内部带有“核心”的警报窗口,另一个带有正确参数调用的另一个对象的方法......
所以,第二个问题是......第一个变量出了什么问题?我不想将我的方法直接分配给事件处理程序!我想在我的代码的任何部分调用这个方法!怎么做?
P.S。正如你所看到的那样,我试图用自己而不是这样做等等......没什么可帮助的!
答案 0 :(得分:0)
在创建类之后,您似乎试图覆盖一个keyup函数?
你可以这样做的一种方法是用原始函数初始化,然后覆盖它:
<div id="field">
<input type="text" value="search1" />
</div>
<div id="field2">
<input type="text" value="search2" />
</div>
<script>
var SearchField = function (id) {
this.init = function () {
var me = this;
this.el = document.getElementById(id);
this.input = this.el.getElementsByTagName('input');
this.input[0].addEventListener('keyup', function (e) {
me.onKeyUp(e);
});
self = this;
}
this.onKeyUp = function (e) {
console.log('onKeyUp');
};
this.init();
};
var search1 = new SearchField('field');
var search2 = new SearchField('field2');
// overwrite the key up function
search2.onKeyUp = function(e) {
console.log('onKeyUp2');
};
</script>