You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在JavaScript类方法的forEach循环内调用内部函数?

问题解决思路

首先明确几个核心错误点:

  • 直接调用e.setKey()时,数组内的对象e本身并没有setKey方法,自然会提示找不到。
  • e.this.setKey()是完全错误的写法,this是JavaScript的上下文关键字,不是对象的属性,无法通过某个对象访问。

下面给你三种可行的解决方案:

方案一:直接调用局部的setKey函数

因为你在forEach里用了箭头函数,它的上下文和外层Graph方法一致,而且setKey是Graph方法内部的局部函数,箭头函数里可以直接访问到它。修改代码如下:

class Mazefinder {
  constructor() {
  }

  Graph() {
    this.vertices = this.mazeArray;
    
    function setKey(key) {
      let setKeyStack = [key];
      return setKeyStack;
    }

    this.vertices.forEach((e) => {
      if (e === s) {
        const keyToAdd = this.nodeIDS + this.nodeIdCount.toString();
        // 直接调用局部的setKey,无需绑定到任何对象
        const keyStack = setKey(keyToAdd);
        // 如果需要把结果赋值给e,可添加:e.keyStack = keyStack;
      }
    })
  }
}

这个方案最直接,适合setKey仅在Graph方法内部使用的场景。

方案二:给数组对象e添加setKey方法

如果你确实需要让e对象自身能调用setKey,可以直接把这个函数赋值给e的属性:

class Mazefinder {
  constructor() {
  }

  Graph() {
    this.vertices = this.mazeArray;
    
    function setKey(key) {
      let setKeyStack = [key];
      return setKeyStack;
    }

    this.vertices.forEach((e) => {
      if (e === s) {
        const keyToAdd = this.nodeIDS + this.nodeIdCount.toString();
        // 给当前e对象添加setKey方法
        e.setKey = setKey;
        // 现在可以通过e调用该方法
        const keyStack = e.setKey(keyToAdd);
      }
    })
  }
}

注意:这种方式只会给符合条件的e对象添加方法,数组内其他元素不会拥有这个方法。

方案三:把setKey改成类的实例方法

如果setKey需要在类的其他方法里复用,直接把它定义成类的实例方法更合适:

class Mazefinder {
  constructor() {
  }

  // 定义为类的实例方法
  setKey(key) {
    let setKeyStack = [key];
    return setKeyStack;
  }

  Graph() {
    this.vertices = this.mazeArray;
    
    this.vertices.forEach((e) => {
      if (e === s) {
        const keyToAdd = this.nodeIDS + this.nodeIdCount.toString();
        // 通过this调用类的setKey方法
        const keyStack = this.setKey(keyToAdd);
        // 如果要让e也能调用,可赋值:e.setKey = this.setKey.bind(this);
        // 之后即可用e.setKey(keyToAdd);调用
      }
    })
  }
}

这种方式扩展性最好,适合多个方法需要复用setKey逻辑的场景。

内容的提问来源于stack exchange,提问作者KirB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:20:34