Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建交叉过滤器&x201C;插件&x201D;_Javascript_Crossfilter - Fatal编程技术网

Javascript 创建交叉过滤器&x201C;插件&x201D;

Javascript 创建交叉过滤器&x201C;插件&x201D;,javascript,crossfilter,Javascript,Crossfilter,我试着搜索这个,希望问这个问题不会暴露出我的搜索技巧很差,但可能会。因为这似乎是一项Javascript基本技能 如何向Crossfilter添加新函数?我可以将其添加到交叉过滤器对象的“实例”中,但我不知道如何将其添加到“类”中。(我知道这不是一门真正的课。) 这很有效 var xf=交叉过滤器(数据) xf.myFunction=\u=> 但我更喜欢这样做(尽管我知道它不起作用,因为交叉过滤器不是一个类),所以它不是特定于单个对象,而是我创建的所有交叉过滤器对象 Crossfilter.pr

我试着搜索这个,希望问这个问题不会暴露出我的搜索技巧很差,但可能会。因为这似乎是一项Javascript基本技能

如何向Crossfilter添加新函数?我可以将其添加到交叉过滤器对象的“实例”中,但我不知道如何将其添加到“类”中。(我知道这不是一门真正的课。)

这很有效

var xf=交叉过滤器(数据)

xf.myFunction=\u=>

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

Crossfilter.prototype.myFunction=

我认为jQuery插件上的一些帖子可以帮助我调整答案,但这似乎并没有让我达到目的,因为这(似乎)是jQuery的功能,而不是JavaScript


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

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

所以这里没有办法使用继承。要将该方法添加到所有实例,必须对工厂进行monkey patch:

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

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

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

所以这里没有办法使用继承。要将该方法添加到所有实例,必须对工厂进行monkey patch:

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

当您执行
Crossfilter.prototype.myFunction=…
时会得到什么?如果出现错误,应将其添加到问题中,如果出现意外行为,请尝试描述它。关于您想要做什么的一些精确性也可以得到(您的函数是否应该访问/修改其他交叉过滤器属性、函数?)当您执行
Crossfilter.prototype.myFunction=…
时,您会得到什么?如果出现错误,应将其添加到问题中,如果出现意外行为,请尝试描述它。关于你想做什么的一些精确性也可能会被忽略(你的函数应该访问/修改其他交叉过滤器属性、函数吗?)好吧-所以我没有完全偏离正确的方向,没有看到“直接”的方法。为了理解这里发生的事情,我不得不读了一些Monkey Patching的书,并考虑到这一点,编写一个函数,只需要一个
交叉过滤器
对象和一个函数(
myFunction(xf,func)
),并通过引用修改
xf
对象,似乎更简单。如果我真的和议员一起去的话,我要把你提供的议员代码放在哪里呢。我以前没有这样做过,所以我有点天真/不知道我是否在我的代码中,在一些文件中,等等。马特猴子补丁的要点是避免修改原始源代码,这样你就可以用一个新版本来更新它(当然,只要修改不影响你的补丁)。所以,这个补丁应该在你自己的代码中,在加载Crossfilter的源代码之后,在你对它做任何事情之前。巨大的帮助让我走了!我必须添加
返回实例函数(…args)
的末尾进行编码>以使上述操作正常。这是正确的做法还是我误解了你的发言?好吧,所以我没有完全偏离“直接”的做法。为了理解这里发生的事情,我不得不读了一些Monkey Patching的书,并考虑到这一点,编写一个函数,只需要一个
交叉过滤器
对象和一个函数(
myFunction(xf,func)
),并通过引用修改
xf
对象,似乎更简单。如果我真的和议员一起去的话,我要把你提供的议员代码放在哪里呢。我以前没有这样做过,所以我有点天真/不知道我是否在我的代码中,在一些文件中,等等。马特猴子补丁的要点是避免修改原始源代码,这样你就可以用一个新版本来更新它(当然,只要修改不影响你的补丁)。所以,这个补丁应该在你自己的代码中,在加载Crossfilter的源代码之后,在你对它做任何事情之前。巨大的帮助让我走了!我必须添加
返回实例函数(…args)
的末尾进行编码>以使上述操作正常。这是正确的做法还是我误解了你的发言?