【发布时间】:2016-08-10 11:19:29
【问题描述】:
我正在尝试覆盖库中的特定函数。
就我而言,我试图覆盖Framework7 上的一些功能。该库只有一个名为 Framework7 的类,在非 ES6 javascript 中,创建应用程序实例如下所示:
var app = new Framework7();
所以我认为它是可扩展的,所以这里我的代码来扩展它:
export class Application extends Framework7 {
constructor(options) {
super(options);
}
}
代码运行良好,但是,当我尝试覆盖其中一个函数时,比如说showPreloader,函数本身永远不会被调用
export class Application extends Framework7 {
constructor(options) {
super(options);
}
showPreloader(title) {
console.log('this not printed :(');
super(title); // this is not called as well
// but showPreloader() from Framework7 still called
}
}
我也尝试了不同的方法来覆盖它,我提供了这样的解决方案:
export class Application extends Framework7 {
constructor(options) {
super(options);
this.showPreloader = (title) => {
console.log('print me!'); // printed! :D
super(); // oh, wait! cannot call super from here! :(
}
}
}
但是,它看起来有点丑,我不能从那里调用 super。
是否有任何解决方法,以便我可以覆盖库中的函数并通过super(或其他任何东西?)调用基本函数
【问题讨论】:
-
不,这就是覆盖特定于实例的方法的工作原理。您可以通过在覆盖之前将原始数据存储在变量中并执行老式
.call(this)来调用“超级”方法 -
看起来库并没有将这些方法放在原型上 - 它们直接将它们分配给函数实例 - 因此您需要逐个函数覆盖这些方法原型继承
-
@Bergi 是不是类似于我在帖子中描述的最后一种方法?但是将
this.showPreloader保存到变量中并将.call()保存在被覆盖的函数上? -
@CodingIntrigue 我不太清楚你所说的“逐个函数覆盖这些”到底是什么意思。也许你可以用一些例子来回答这个问题:)
标签: javascript oop ecmascript-6 babeljs html-framework-7