在 javascript 中覆盖原型函数的内部函数

Override an inner function of a prototype function in javascript

我有一个 javascript 对象,如下所示:

var Loader = function() {}
Loader.prototype = {
    constructor: Loader,
    foo: function(a, b) {
        function bar() {
            return a + b;
        }
        return bar();
    }
};

我需要覆盖 foo 中的 bar() 函数。 foo 函数可以被重写为:

Loader.prototype.foo = function() {}

我已经对内部函数进行了相同的尝试,但没有成功。

Loader.prototype.foo.bar = function() {}//doesnt work
Loader.prototype.foo.protoype.bar = function() {}//doesnt work

如果有人能指出正确的方向,我会很高兴。提前致谢

在当前声明中,无法修改bar()函数。它存在于 foo() 方法的范围内,无法从外部更改。


动态覆盖的替代解决方案可以是:

var Loader = function() {}
Loader.prototype = {
    constructor: Loader,
    foo: function(a, b, barFun) {
        if (typeof barFun !== 'function') {
           barFun = function() {
              return a + b;
           }
        }
        return barFun.call(this, a, b);
    }
};

调用foo()时,可以使用自定义函数作为第三个参数。
然后就可以使用了:

var loader1 = new Loader();

loader1.foo(1, 2); // prints 1 + 2 = 3, default bar() function

loader1.foo(1, 2, function(a, b) {
  return a - b;
}); // prints 1 - 2 = -1, custom bar() function

检查working demo

在我看来,内部bar函数不是外部foo函数的方法,它是loader的方法object.Hope,它会帮助你