gpt4 book ai didi

javascript - NodeJS 和 ES6 类实例中的变量可见性

转载 作者:行者123 更新时间:2023-12-02 14:49:58 28 4
gpt4 key购买 nike

我正在尝试将大型 JS 代码库从单个文件重构为多个文件中的多个类。我无法访问我认为应该能够访问的变量。我一定是误解了有关 javascript 对象/NodeJS 模块/导出/导入/引用“this”的内容。

在开始之前,所有内容都在 block 内的 ai.js 文件中 module.exports = function Ai() { ...

我根据 EcmaScript 6 类语法创建了文件 heatMap.js:

module.exports = HeatMap;
class HeatMap {
constructor(ai, ...) {
this.ai = ai;
...
}
...
}

我修改了 ai.js 以导入 HeatMap 类,实例化它,并向该对象传递对 ai 对象的引用,以便热图可以访问其变量。

const HeatMap = require("heatMap.js");
module.exports = function Ai() {
var ai = this;
var currentRound = ...
...
function bookKeeping(...) {
heatMap = new HeatMap(ai,...);
...
}
...
}

尝试使用 this.ai.currentRound 访问 heatMap 中的 currentRound 会产生:

Unresolved variable currentRound.

为什么? “This”应该引用实例化的 heatMap 对象,“ai”应该引用 ai 对象,并且 ai 对象具有变量 currentRound。实现此目的的一种方法是将所有变量作为函数调用中的参数传递,但变量数量很多,因此这不是一个干净的解决方案。

最佳答案

鉴于HeatMap定义:

module.exports = HeatMap;

function HeatMap(ai) {
console.log(ai.currentRound);
}

以及AI定义:

module.exports = AI;
const HeatMap = require('HeatMap');

function AI() {
this.currentRound = 0;
}

AI.prototype.bookKeeping = function bookKeeping() {
const heatMap = new HeatMap(this);
}

AI 实例调用 bookKeeping() 时,您应该会看到打印 0

我不使用 ES2015 类,但从我看来,你的范围是错误的。您的 currentRound 变量的范围仅限于 AI 函数的本地范围,并且不会以任何方式公开(在您提供的代码片段中)。因此,当您将 AI 实例传递到 HeatMap 时,currentRound 可用于 AI 构造函数公开的方法,但不是 HeatMap 函数本身。

关于javascript - NodeJS 和 ES6 类实例中的变量可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com