我将通过示例解释我要解决的问题。
我通常以这种方式在js中定义自己的库:
window.myLib = (function () {
var public = {}; // for storing public methods and values
var private = {}; // for storing private methods and values
// Atributes and methods here
return public; // return the public part to be used globally
})();
现在,我想执行一个可重写的方法作为click事件的回调。我会这样做:
<input type="checkbox" id="mCheck" onchange="myLib.myMethod()">
然后,在库中,我声明了回调“ myMethod”,该回调调用了我想全局使用的另一个公共“可重写”方法,“在库的外部”:]]
//... public.overridable = function(param){console.log("Override this!");}; public.myMethod = function(){ if(private.condition) // Just to put some logic public.overridable(private.value); }; //...
这里是问题。如果我这样重新定义“ overridable”方法:
myLib.overridable = function(p){console.log(p)};
然后单击事件的回调将继续触发原始的“ public.override”,并输出“覆盖此!”。消息而不是参数的值。
如何覆盖公共方法以在库外重新定义回调?
提前感谢。
我将通过示例解释我要解决的问题。我通常以这种方式在js中定义自己的库:window.myLib =(function(){var public = {}; //用于存储公共方法和值...
您提供的摘录已经是执行此操作的正确方法。如果遇到问题,这是由于实现中的某些细节所致-例如,如果将public.overridable
存储在某个变量中,然后以这种方式调用它,而不是每次都引用public.overridable
。
您总是可以永久修改该公共实现,但是我想您想要的是一个临时替代。如果是这样,我认为您最好的选择就是重新设计库。如果您需要能够动态更改行为,则需要您的API来支持它。