假设我有一个函数,我在其中访问一个我无法更改的接口(在本例中为mongoose)。接口返回一个只传递找到的资源的承诺;
show = function(response) {
Resource.findById(req.params.id).then(renderResource);
}
function renderResource(resource) {
// render the response
}
为了呈现响应,我需要访问response
函数中的show
参数。我可以使用bind
函数,劫持this
作为响应变量;
show = function(response) {
Resource.findById(req.params.id).then(renderResource.bind(response));
}
function renderResource(resource) {
this.send(resource);
}
但是如果我想将另一个参数传递给renderResource
函数呢?我设法做到的唯一方法就是这样;
show = function(response) {
Resource.findById(req.params.id).then(function(resource) {
renderResource.call(response, resource, "foo"));
}
}
function renderResource(resource, otherArg) {
this.send(resource);
//do something with otherArg
}
但此时我不再对代码感到满意,因为;
call
,所以我仍然可以在函数中使用this
,但实际上到目前为止我还可以传入response
作为第三个arg。 我确信必须有一种模式或某种东西以更简洁的方式处理这个问题,而不必声明一个新的函数文字。谁能提出一个模式?有没有更简洁的方法来处理这种情况?
答案 0 :(得分:2)
您可以根据需要将尽可能多的参数传递给bind
。我会避免使用this
作为传递参数的方法来避免混淆。
show = function(response) {
Resource.findById(req.params.id)
.then(renderResource.bind(null, response, "foo"));
}
function renderResource(response, otherArg, resource) {
response.send(resource);
//do something with otherArg
}
有关详细信息,请参阅bind
文档:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind