创建一个交叉过滤器“插件”

时间:2018-07-05 08:54:40

标签: javascript crossfilter

我尝试搜索此内容,希望问到这并不能揭示我的搜索技能差,但可能可以。因为似乎这是Javascript的基本技能。

如何向Crossfilter添加新功能?我可以将其添加到Crossfilter对象的“实例”中,但是我不知道如何将其添加到“类”中。 (我知道这不是一堂课。)

这有效

var xf = crossfilter(data);

xf.myFunction = _ => ...

但是我更喜欢这样做(尽管我知道,因为Crossfilter不是一个类,所以它不起作用),因此它不是特定于单个对象,而是我创建的所有Crossfilter对象。

Crossfilter.prototype.myFunction = ...

我认为有关jQuery插件的几篇文章可以帮助我调整答案,但似乎并没有吸引我,因为这(似乎)是jQuery的功能,而不是JavaScript的功能。

http://learn.jquery.com/plugins/

1 个答案:

答案 0 :(得分:3)

实际上,交叉过滤器既不是类,也不使用原型继承:

function crossfilter() {
  var crossfilter = {
    add: add,
    remove: removeData,
    dimension: dimension,
    groupAll: groupAll,
    size: size
  };
  //...
  return crossfilter;
}

Source

因此,这里没有办法使用继承。要将该方法添加到所有实例中,您必须猴子修补工厂:

 {
   const oldCrossfilter = crossfilter;
   crossfilter = function(...args) {
      const instance = oldCrossfilter(...args);
      instance.myFunction = _ => _;
      return instance;
   };
 }