Javascript 创建交叉过滤器&x201C;插件&x201D;
我试着搜索这个,希望问这个问题不会暴露出我的搜索技巧很差,但可能会。因为这似乎是一项Javascript基本技能 如何向Crossfilter添加新函数?我可以将其添加到交叉过滤器对象的“实例”中,但我不知道如何将其添加到“类”中。(我知道这不是一门真正的课。) 这很有效 var xf=交叉过滤器(数据) xf.myFunction=\u=> 但我更喜欢这样做(尽管我知道它不起作用,因为交叉过滤器不是一个类),所以它不是特定于单个对象,而是我创建的所有交叉过滤器对象 Crossfilter.prototype.myFunction= 我认为jQuery插件上的一些帖子可以帮助我调整答案,但这似乎并没有让我达到目的,因为这(似乎)是jQuery的功能,而不是JavaScriptJavascript 创建交叉过滤器&x201C;插件&x201D;,javascript,crossfilter,Javascript,Crossfilter,我试着搜索这个,希望问这个问题不会暴露出我的搜索技巧很差,但可能会。因为这似乎是一项Javascript基本技能 如何向Crossfilter添加新函数?我可以将其添加到交叉过滤器对象的“实例”中,但我不知道如何将其添加到“类”中。(我知道这不是一门真正的课。) 这很有效 var xf=交叉过滤器(数据) xf.myFunction=\u=> 但我更喜欢这样做(尽管我知道它不起作用,因为交叉过滤器不是一个类),所以它不是特定于单个对象,而是我创建的所有交叉过滤器对象 Crossfilter.pr
实际上,交叉过滤器既不是一个类,也不使用原型继承:
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)
的末尾进行编码>以使上述操作正常。这是正确的做法还是我误解了你的发言?