从父进程调用时,父方法会覆盖子方法

时间:2015-04-27 13:07:08

标签: javascript

我知道一个可怕的标题,但这是一个用例子来定义的问题。

我有一个涉及多层继承的代码结构,我的示例只显示两个,因为这足以证明行为。

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/

任何人都可以解释为什么会这样吗?

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评估给孩子。