第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Node - 為什么導(dǎo)入的模塊不能訪問(wèn)全局變量?

Node - 為什么導(dǎo)入的模塊不能訪問(wèn)全局變量?

慕標(biāo)琳琳 2022-11-11 16:38:53
我最近開(kāi)始使用 ES6 并將我的代碼正確地劃分為多個(gè)文件以提高可讀性和更容易的版本控制,但我遇到了一個(gè)我不確定是否有意或我遺漏了什么的問(wèn)題。我有一個(gè)類存儲(chǔ)在與我的主腳本 (main.js) 分開(kāi)的文件 (class.js) 中,并通過(guò) module.exports 導(dǎo)出。在 main.js 中,class.js 是必需的,我使用它來(lái)創(chuàng)建它所包含的類的一些實(shí)例。在 main.js 中,我有一個(gè)定期更新的全局變量,比如說(shuō) connectedPlayers。在我的 class.js 方法之一中,我有 usersOnline(),它應(yīng)該簡(jiǎn)單地返回全局變量 connectedPlayers 的值。但是,當(dāng)我嘗試執(zhí)行此操作時(shí),會(huì)拋出一個(gè)未定義 connectedPlayers 的錯(cuò)誤。我的印象是,由于調(diào)用 users.online 的對(duì)象是在 main.js 中定義的,因此它的 usersOnline() 方法會(huì)在 main.js 中查找 connectedPlayers,而不是 class.js ......這是正確的想法嗎?如果我在這個(gè)概念上是正確的,那么為什么我不能訪問(wèn) connectedPlayers?如果我'請(qǐng)注意,這些都是占位符,實(shí)際上我在 main.js 中有很多全局變量,我需要 class.js 中的方法才能訪問(wèn)它們。這些全局變量也會(huì)定期更改,因此我不一定將它們傳遞給構(gòu)造函數(shù),也不想在每次調(diào)用我想使用的任何方法時(shí)都提供它們。我敢肯定有更好的方法來(lái)做到這一點(diǎn),但如何?為了進(jìn)一步澄清,我希望獲得的功能類似于 JS 導(dǎo)入在瀏覽器中的工作方式,一旦您導(dǎo)入代碼,它就像您將該代碼塊連接到您要從中導(dǎo)入的代碼一樣。雖然我知道這不是它在節(jié)點(diǎn)中的工作方式,但我認(rèn)為在 main.js 中定義我的類的實(shí)例本質(zhì)上會(huì)調(diào)用該對(duì)象的方法(在 connectedPlayers 的范圍內(nèi)),但我想我的理解是有缺陷的。偽代碼://class.jsclass user{    constructor(id){        this.id = id;    }    someOtherMethod(){        ...    }        usersOnline(){        this.someOtherMethod(this.id); //here to show I need the context to still be the obj        return connectedPlayers;    }}//main.jsvar user = require('class.js');var players = {}var connectedPlayers = 0;players[id] = new user(id);console.log(players[id].usersOnline()) //expect to return value of connectedPlayers, but also execute the other function inside of usersOnline properly.另外,在這個(gè)例子中,我可以簡(jiǎn)單地將玩家數(shù)量移動(dòng)到 class.js 中,但在我的實(shí)際應(yīng)用程序中我不能這樣做。
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

代碼會(huì)有所幫助,但假設(shè)我理解正確,你有一些偽代碼,如:


export class Class{

  constructor(){

    this.name = "foo";

  }

  usersOnline(){

   return main.connectedPlayers();

  }

}


-----


require('Class.js');


function connectedPlayers(){

  // stuff...

  return [Object]

}


...

var class1 = new Class();


console.log(class1.name); // correctly gives "foo"

console.log(class1.usersOnline()); // gives main not defined


這是因?yàn)?class.js 沒(méi)有指向主類的鏈接。僅僅因?yàn)閷?duì)象在 main.js 中被初始化并不意味著對(duì)象知道在它之外發(fā)生了什么。您需要在創(chuàng)建時(shí)告訴對(duì)象,它是什么的一部分。一種常見(jiàn)的方法是傳遞主類的“上下文”。(里程會(huì)有所不同)


constructor(context){

  this.name = "foo";

  this.main = context;

}


---


var class1 = new Class(this);

現(xiàn)在在創(chuàng)建時(shí),該類知道當(dāng)它被要求運(yùn)行它的 usersOnline() 函數(shù)時(shí)應(yīng)該引用哪個(gè)對(duì)象。


請(qǐng)注意,與我列出的方法相比,有更優(yōu)雅的方法可以做到這一點(diǎn),但我列出的方法希望能表明通常以更優(yōu)雅的方式實(shí)現(xiàn)的想法,請(qǐng)參閱此答案以獲取另一種方法和更多鏈接。


查看完整回答
反對(duì) 回復(fù) 2022-11-11
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)