gpt4 book ai didi

javascript - 从父方法调用时父方法覆盖子方法

转载 作者:行者123 更新时间:2023-11-30 12:24:33 25 4
gpt4 key购买 nike

我知道这是一个糟糕的标题,但这是一个更容易用示例定义的问题。

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

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”

在这里查看 fiddle :http://jsfiddle.net/vc8t7fbq/1/

谁能解释为什么会这样?

最佳答案

o.child();o 上调用 child() 方法,即:

self.child = function() {
self.test();
self.parent();
}

self.test() 运行并调用在其下方声明的方法,也在 child 中:

self.test = function() {
alert('child')
}

所以这是您看到的第一个警报。

第二个是 self.parent() 运行时。由于 child 的原型(prototype)是 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 个“子级”警报,因为 this 对子级求值。

关于javascript - 从父方法调用时父方法覆盖子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29896731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com