我知道一个可怕的标题,但这是一个用例子来定义的问题。
我有一个涉及多层继承的代码结构,我的示例只显示两个,因为这足以证明行为。
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();
我希望调用子方法会显示两个警告,同时显示文本&#39; child&#39;但是这仅适用于第一个警报,第二个显示&#39; parent&#39; < / p>
请参阅此处的小提琴:http://jsfiddle.net/vc8t7fbq/1/
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
o.child();
在child()
上调用o
方法,即:
self.child = function() {
self.test();
self.parent();
}
self.test()
在child
内运行并调用声明在其下方的方法:
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"
}
你会看到2&#34;孩子&#34;警报,因为this
评估给孩子。