javascript - 将范围绑定(bind)到 forEach 循环中的项目

标签 javascript node.js typescript ecmascript-6

这对我来说很难在标题中解释,所以我只是举一个例子来更好地解释:

我想传递一个函数,例如 ()=>{console.log(this.operatorValue)},作为递归 traverseCriteria 函数的参数。

遍历标准函数

  function traverseCriteria(arr, parameters,fn) {
        for (const item of arr) {
          if (Array.isArray(item))
          this.traverseCriteria(item, parameters)
          else if (typeof item === 'object'){
              item.operatorValue = parameters[item.Property]
             console.log(item.operatorValue)  ///<-- REPLACE THIS WITH fn()
            //fn()
          }
        }
        return arr
      }

在上面的函数中,我希望能够将 console.log(item.operatorValue) 替换为 fn();

    const criteria =  [
            "and",
            {
              "Collection": "persons",
              "Property": "phone",
              "operator": "eq",
              "operatorValue": "23138213"
            },
            {
              "Collection": "persondetails",
              "Property": "country",
              "operator": "eq",
              "operatorValue": "Russia"
            }
          ]
    const parameters = { phone: "23138213", "country": "Russia" };

函数调用:

  traverseCriteria(criteria,parameters,()=>{console.log(this.operatorValue)}); 

最佳答案

您可以使用.call.apply设置函数的 this 值:

fn.call(item)

但是,请记住,箭头函数没有自己的 this 值,因此要使其工作,您必须传递“正常”函数。

关于javascript - 将范围绑定(bind)到 forEach 循环中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63774641/

相关文章:

javascript - 至少一组所有html元素填充jquery

Javascript - 扩展对象时出错

node.js - Node.JS 中调用 SQL Server 的异步函数无法正常工作

node.js - Express + Request 中途更改 header

javascript - 如何在服务器上手动取消 XMLHttpRequest 文件上传(流)

node.js - 不能在模块外使用 import 语句

javascript - 如何使用 AngularJS 将数据存储在本地存储中?

javascript - 使用 Sencha CMD 缩小现有 ExtJS 应用程序

javascript - 我的 Node 中的 PBKDF2 有什么问题吗?

javascript - 如何在 TypeScript 中将箭头函数返回值分配给 string[]