如何在javascript中覆盖“私有”功能

问题描述 投票:0回答:2

我将通过示例解释我要解决的问题。

我通常以这种方式在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 = {}; //用于存储公共方法和值...

javascript libraries private public
2个回答
0
投票

您提供的摘录已经是执行此操作的正确方法。如果遇到问题,这是由于实现中的某些细节所致-例如,如果将public.overridable存储在某个变量中,然后以这种方式调用它,而不是每次都引用public.overridable


0
投票

您总是可以永久修改该公共实现,但是我想您想要的是一个临时替代。如果是这样,我认为您最好的选择就是重新设计库。如果您需要能够动态更改行为,则需要您的API来支持它。

© www.soinside.com 2019 - 2024. All rights reserved.