在 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,它会帮助你
我有一个 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,它会帮助你