我正在尝试学习 Javascript 编码,遇到了这个问题并有几个问题。 results.push.bind(results) 在这个问题中做了什么?请看下面的问题:
假设 getData 是一个接受查询对象并返回对查询结果的 promise 的函数。还假设 someArrayOfQueries 是一个查询对象数组。解释以下代码将打印什么以及为什么:
function runMultipleQueries(queries) {
var results = [];
queries.forEach(doQuery);
return results;
function doQuery(query) {
getData(query)
.then(results.push.bind(results));
}
}
function log(value) {
console.log(value);
}
runMultipleQueries(someArrayOfQueries).forEach(log);
最佳答案
results.push.bind(results)
的作用是强制 push
的方法调用使用 results
的范围。
TLDR;
results
是一个数组。 results.push()
是对Array#push
的调用,但是通过将函数results.push
直接传递给Promise Promise #then
它将在不同的范围内被调用。
也就是说,关键字this
将引用不同的对象。
通过使用 bind
(例如 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind ),范围将“绑定(bind)”到特定对象。
之所以这样,是因为 JavaScript 是一种原型(prototype)语言,而不是一种面向对象的语言。
关于javascript - .push.bind 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46815479/