有没有办法在JavaScript中有条件地缩短对象的成员函数?

有没有办法在JavaScript中有条件地缩短对象的成员函数?,javascript,node.js,mongodb,ecmascript-6,Javascript,Node.js,Mongodb,Ecmascript 6,我正在制作一个函数,它既接受.toArray()又不接受。在es6、es7或es8中是否有条件地添加此选项 wait db .收集(收集) .find(参数) .toArray()//我是否希望有条件地添加它 在这个意义上(这不起作用) 还是只有两种方法可以做到这一点 有没有办法在JavaScript中有条件地缩短对象的成员函数 不是真的。您有一组链接的方法,不能有条件地将某些内容插入到链中 我的感觉是,最明确的选择是: let x = db.collection(collection).fi

我正在制作一个函数,它既接受
.toArray()
又不接受。在es6、es7或es8中是否有条件地添加此选项

wait db
.收集(收集)
.find(参数)
.toArray()//我是否希望有条件地添加它
在这个意义上(这不起作用)

还是只有两种方法可以做到这一点

有没有办法在JavaScript中有条件地缩短对象的成员函数

不是真的。您有一组链接的方法,不能有条件地将某些内容插入到链中

我的感觉是,最明确的选择是:

let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();
还有其他一些奇怪的事情,比如提前在对象上放置一个no-op方法,然后从一个有时包含“toArray”,有时包含“noop”的变量执行一个方法

但是,我不认为我自己会以这种方式编写代码,因为我觉得它不是很清楚



仅供参考,您的特定示例有点奇怪,因为
.find()
返回一个游标对象,而
.toArray()
返回一个解析为数组的承诺。因此,您还要求以一种方式与另一种方式得到不同类型的数据。看起来这个不同的结果类型无论如何都必须走不同的代码路径,所以条件分支不仅仅是这一步。这表明人们应该从更大的角度来看待整个问题,而不仅仅是这一步或为了找到最佳解决方案。

您可以使用变量有条件地将函数存储到内存中。在大多数情况下,它不会提高性能。如果不执行该函数,则它不会执行。
let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();
let x = await db.collection(collection).find(params)[someCondition ? "toArray" : "noop"]();