gpt4 book ai didi

javascript - John Resig 继承类和重写方法 - 调用错误的方法

转载 作者:行者123 更新时间:2023-12-03 10:22:33 24 4
gpt4 key购买 nike

我正在尝试使用 John Resig 的继承类来扩展我正在开发的一些类。这些类具有被重写的方法。尽管如此,这些方法的原始版本也应该被调用。我的问题是,当我尝试调用父类(super class)上的方法时,它会调用覆盖原始方法的方法。

以下代码为例:

var A = Class.extend({
init: function(){
this.doStuff(); // this invokes doStuff from B instead of A
},

doStuff: function(){
// does stuff on the super class
}

});

var B = A.extend({
init: function(){
this._super();

this.doStuff();
},

doStuff: function(){
// does stuff on the sub class
}
});

当我创建 B 的实例时:

var test = B.create();

一旦调用 A(父类(super class))中的 init 方法,就会调用 B 中的 doStuff,而不是 A 类中的 doStuff。

我可以做些什么来防止这种情况发生吗?

最佳答案

Is there anything I can do in order to prevent this from happening?

是的,您需要通过显式引用您想要调用的方法来调用该方法,而不是在实例上动态分派(dispatch)它:

var A = Class.extend({
init: function(){
A.prototype.doStuff.call(this); // always invokes doStuff from A
},
doStuff: function(){
// does stuff on the super class
}
});

动态调度是自然且预期的行为。通常,您还会在 B::doStuff 中对 A::doStuff 进行 super 调用。

请注意,这与 super 调用或使用 Resig 的语法糖没有任何关系。

关于javascript - John Resig 继承类和重写方法 - 调用错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565101/

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