javascript - .push.bind 是做什么的?

标签 javascript

我正在尝试学习 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/

相关文章:

javascript - CSS 中的垂直对齐?

javascript - 在 $.ajaxError 方法中检索 textStatus 值

javascript - 跨域子窗口 DOM 引用

javascript - 如果选项值不匹配,文本框自动完成功能将被清除

javascript - 我可以控制 ES6 forEach 循环中的循环次数吗

javascript - leaflet如何使用js制作动态图片弹出

javascript - Transcrypt:使用来自另一个 python 脚本的代码导致 'TypeError: module is undefined'

javascript - 在任何地方替换图像 - Javascript

javascript - 在选择文件之前发送的表格

javascript - Yify torrent api 返回未定义的值