在JavaScript中将对象方法作为参数传递

时间:2016-12-27 17:12:54

标签: javascript mongodb functional-programming prototypal-inheritance

我正在为Mongo集合编写JavaScript单元测试。我有一个集合数组,我想为这些集合生成一个项目计数数组。具体来说,我对使用Array.prototype.map感兴趣。我希望这样的事情可以发挥作用:

const collections = [fooCollection, barCollection, bazCollection];
const counts = collections.map(Mongo.Collection.find).map(Mongo.Collection.Cursor.count);

但相反,我收到一个错误,告诉我Mongo.Collection.find未定义。我认为这可能与Mongo.Collection是构造函数而不是实例化对象有关,但我想了解更好的情况。有人可以解释为什么我的方法不起作用,我需要改变什么,以便我可以将find方法传递给map?谢谢!

1 个答案:

答案 0 :(得分:0)

findcount是原型函数,需要在集合实例上作为方法(具有正确的this上下文)进行调用。 map没有做到这一点。

最好的解决方案是使用箭头功能:

const counts = collections.map(collection => collection.find()).map(cursor => cursor.count())

但也有an ugly trick让你不用:

const counts = collections
.map(Function.prototype.call, Mongo.Collection.prototype.find)
.map(Function.prototype.call, Mongo.Collection.Cursor.prototype.count);