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

时间:2016-05-05 05:41:59

标签: javascript prototype overrides

我有一个如下所示的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
如果有人能指出我正确的方向,我会很高兴。提前致谢

2 个答案:

答案 0 :(得分:3)

在当前声明中,无法修改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()时,可以使用自定义函数作为第3个参数 然后你可以使用它:

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

答案 1 :(得分:0)

在我看来,内部条形函数不是外部foo函数的方法,它是加载器对象的方法。希望它能帮到你