0

我知道javascriptcall并且apply能够将它们应用于简单的函数,但是在将它们应用于链式方法调用时我完全感到困惑,如下所示:

db.collection("posts").find({}, {limit:10, sort:[['views', -1]]}).toArray(function(err, posts) {
   console.log(posts)
});

是否可以将数组中的参数传递给使用or[{}, {limit:10, sort:[['views', -1]]} ]的上述方法?callapply

我想使用它来轻松访问和修改参数,方法是将它们保存在外部数组中。

谢谢

4

2 回答 2

0

我认为没有任何方法可以保持链接。您需要存储中间结果。

var posts = db.collection("posts");
posts
    .find.apply(posts, argsarray)
    .toArray(function(err, posts) {
        console.log(posts)
    });
于 2012-09-21T19:15:31.837 回答
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(...);
于 2012-09-21T19:15:33.807 回答