我在javascript中了解call
和apply
并且能够将它们应用于简单的函数,但在将它们应用于链式方法调用时,我完全感到困惑,如下所示:
db.collection("posts").find({}, {limit:10, sort:[['views', -1]]}).toArray(function(err, posts) {
console.log(posts)
});
是否可以使用[{}, {limit:10, sort:[['views', -1]]} ]
或call
将数据中的参数(例如apply
)传递到上述方法中?
我想用它轻松访问&通过将参数保存在外部数组中来修改参数。
谢谢
答案 0 :(得分:0)
我认为没有办法保持链接。您需要存储中间结果。
var posts = db.collection("posts");
posts
.find.apply(posts, argsarray)
.toArray(function(err, posts) {
console.log(posts)
});
答案 1 :(得分:0)
您可能知道,这些功能相同:
obj.func(1, 2, 3);
obj.func.apply(obj, [1, 2, 3]);
考虑到这一点,您可以执行以下操作:
db.collection("posts").find.apply(
db.collection("posts")
[ {}, {limit:10, sort:[['views', -1]]} ]
).toArray(...);
当然,这是非常低效的,因为你会两次调用该集合。所以你可以这样做:
var collection = db.collection("posts");
collection.find.apply(
collection
[ {}, {limit:10, sort:[['views', -1]]} ]
).toArray(...);