我有一个如下所示的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
如果有人能指出我正确的方向,我会很高兴。提前致谢
答案 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函数的方法,它是加载器对象的方法。希望它能帮到你