Javascript 从父方法调用时,父方法重写子方法
我知道这是一个糟糕的标题,但这是一个更容易用例子来定义的问题 我有一个涉及多个继承级别的代码结构,我的示例只显示了两个,因为这足以演示行为Javascript 从父方法调用时,父方法重写子方法,javascript,Javascript,我知道这是一个糟糕的标题,但这是一个更容易用例子来定义的问题 我有一个涉及多个继承级别的代码结构,我的示例只显示了两个,因为这足以演示行为 var parent = function() { var self = this; self.parent = function() { self.test(); } self.test = function() { alert('parent'); } }; var chil
var parent = function() {
var self = this;
self.parent = function() {
self.test();
}
self.test = function() {
alert('parent');
}
};
var child = function() {
var self = this;
self.child = function() {
self.test();
self.parent();
}
self.test = function() {
alert('child')
}
};
child.prototype = new parent();
var o = new child();
o.child();
我希望调用child方法会显示两个警报,都显示文本“child”,但这仅适用于第一个警报,第二个警报显示“parent”
请看这里的小提琴:
有人能解释为什么会发生这种情况吗?o.child()
调用o
上的child()
方法,即:
self.child = function() {
self.test();
self.parent();
}
self.test()
self.test = function() {
alert('child')
}
这是您看到的第一个警报
第二种情况是运行self.parent()
时。由于child
的原型是parent
,因此调用self.parent()
调用:
self.parent = function() {
self.test();
}
我想您的困惑就在这里-为什么self.test()
调用父对象而不是子对象?
原因是您有这样一行:var self=this
。这意味着,This
已放入self
,并且不会重新评估。意思是,self
是父项
作为证据,如果将方法主体切换为:
self.parent = function() {
this.test(); //will alert "child"
}
你会看到两个“儿童”警报,因为这个
对儿童进行评估。谢谢你,这让我明白了我一直在努力想的事情。将“this”放在self中是为了给我一个实例的永久引用,例如事件调用self.parent()时,“this”现在是对html表单元素的引用。。。你能找到解决这个问题的方法吗?你可以在函数内部询问:if(this.hasOwnProperty(“test”){…}
。如果从子对象调用,那么它将返回true,因为子对象具有此函数(其他派生函数可能没有)。事件可能会返回false,除非您有一个具有该名称的全局变量/函数。这有帮助吗?对不起,我不认为我的问题特别清楚,这里有一个小提琴的更新版本,显示了新的问题:所以我试图从一个调用父函数的事件调用孩子的方法是的,这就是我的意思,这里看一下更新后的小提琴-我在评论中编写了代码。如果不清楚,请告诉我Hi Omri,我现在明白你的意思了,对于给定的解决方案,这将非常有效。此后,我发现了一种使用jQuery的替代解决方案,在jQuery中,我可以在事件绑定的事件数据中传递当前上下文,这对于我抽象程度较低的问题更为有效。非常感谢您的帮助:)