私は、1つのファイルから大きなJSコードベースを複数のファイルの複数のクラスにリファクタリングしようとしています。私はアクセスできるはずの変数にはアクセスできません。私はjavascriptオブジェクト/ NodeJSモジュール/ exports/imports/'this'を参照していることを誤解しているはずです。私はai.jsを修正NodeJSとES6のクラスインスタンスの可視性
module.exports = HeatMap;
class HeatMap {
constructor(ai, ...) {
this.ai = ai;
...
}
...
}
:私は開始前に
は、すべてがECMAScriptの6クラスの構文に従って、私はファイルheatMap.jsを作成module.exports = function Ai() { ...
ブロック内のファイルai.jsにありましたを使用してヒートマップクラスをインポートし、インスタンス化し、ヒートマップがその変数にアクセスできるようにオブジェクトにaiオブジェクトへの参照を渡します。
未解決の変数currentRound:
this.ai.currentRound
収率でヒートマップ内currentRoundにアクセスしようとしているconst HeatMap = require("heatMap.js"); module.exports = function Ai() { var ai = this; var currentRound = ... ... function bookKeeping(...) { heatMap = new HeatMap(ai,...); ... } ... }
。
なぜですか? "this"はインスタンス化されたheatMapオブジェクトを参照し、 "ai"はaiオブジェクトを参照し、aiオブジェクトは変数currentRoundを持つ必要があります。この作業を行う1つの方法は、すべての変数を関数呼び出しのパラメータとして渡すことですが、その多くがありますので、クリーンな解決策ではありません。あなたは0
がAI
のインスタンスからbookKeeping()
を呼び出すに印刷されるはずです
module.exports = AI;
const HeatMap = require('HeatMap');
function AI() {
this.currentRound = 0;
}
AI.prototype.bookKeeping = function bookKeeping() {
const heatMap = new HeatMap(this);
}
:
module.exports = HeatMap;
function HeatMap(ai) {
console.log(ai.currentRound);
}
そしてAI
定義:
* "" ai "はaiオブジェクト" *を参照する必要がありますが、このオブジェクトは 'currentRound'プロパティを持っていますか?あなたの例では、ローカル変数* currentRound'をプロパティではなく作成しています。おそらく、あなたは 'this.currentRound = ...'を行うつもりでしたか? –