在 Javascript(严格模式)中未调用重写函数

Overridden function not getting called in Javascript (strict mode)

我 运行 遇到一个问题,即覆盖的函数没有被调用。

基本实现如下。

// I have a base file that defines and exports a function like this
function a() {
    // do something
}

module.exports = {
    a: a,

    b: function () {
        $('body').on('some_event', function (e, response) {
            // do something
            
            // call a
            a();
        });
    }
}

重写如下

// I need to override the function a() and here is what I am doing
var base = require('mystuff/base');

function a() {
    // override implementation
}

base.a = a;

module.exports = base;

当在页面上引发 some_event 时,b() 会执行,并且在最后一步中它会在基础实现中执行 a(),而不是被覆盖的实现。

有人能告诉我如何修复上面的代码,使其在引发事件时执行覆盖的函数吗?函数 b() 应该执行,并且在它的最后一步应该执行覆盖的 a().

您只需要进行一些更改。我在下面稍微清理了代码。显着的变化是改变对 a():

调用的引用

注意:根据 OP 评论编辑。


class Base {
  a() {
    console.log('in mystuff/base a()');
  }
  b() {
    setTimeout(this.a, 2000);
  }
}

你可以在这个repl看到这个作品:

https://repl.it/@randycasburn/overriding-imports