亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在JavaScript(node.js)中導入變量?

是否可以在JavaScript(node.js)中導入變量?

幕布斯6054654 2019-09-27 15:45:37
我在中有變量app.js:var G = {};module.exports = G;var DATA = G.DATA = 'DATA';var F1 = G.F1 = function(val){  return val;};通過這種方式,我可以導出對象下的變量G,同時可以直接寫入變量DATA而無需G.前綴。到現在為止還挺好?,F在,我想運行一個測試了app.js在test.js:var G = require('./app.js');console.log(G.DATA);  // -> DATA這可行,但是我也想直接寫DATA沒有G.前綴的變量來訪問變量console.log(DATA);  // -> DATA當然可以var DATA = G.DATA;對于每個變量(屬性)導出和所需的模塊G對象,但顯然,將每個變量手動添加到測試文件以對應G對象是一個繁瑣的過程。有什么辦法可以自動執行此操作?到目前為止,我很悲觀JS function包含var在自己的范圍內,因此從理論上講,沒有辦法var為每個對象屬性都提供一個輔助函數。謝謝。PS。我想避免任何eval或VM節點解決方案。我過去曾經嘗試過,但問題太多了。
查看完整描述

2 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

我可以為每個屬性導出和所需模塊G對象分配局部變量,但是顯然,將每個變量手動添加到測試文件以對應G對象是一個繁瑣的過程。


不,這就是應該的工作方式。您-并且只有您-負責模塊范圍中存在哪些局部變量。所包含模塊的“導出變量”中的任何更改均不應破壞您的代碼。


訪問導入的模塊上的屬性(具有自選名稱)是一種方法。這與Python import app或相當import app as g。


如果您希望某些特殊屬性作為局部變量,通常會像在Python中一樣手動選擇它們from app import DATA, F1。在JS中,您將需要一個多條var語句,就像您在問題中顯示的那樣。但是,有一個語法功能稱為解構分配,這將使此操作更加流暢。您可以在JavaScript 1.7+(Gecko),CoffeeScript或EcmaScript 6中使用它:


var {DATA, F1} = require("app.js");

有什么辦法可以自動執行此操作?


是的,不是。您不應該這樣做,但是可以-就像Python的皺眉一樣from app import *。引用他們說的話,對于JavaScript同樣如此:


[它]在解釋器中引入了一組未知的名稱,可能隱藏了您已經定義的某些內容。


請注意,通常不贊成*從模塊或包進行導入,因為這通常會導致可讀性差的代碼。但是,可以使用它來保存交互式會話中的鍵入。


在JavaScript中,您可以[1] 使用with-statement:


with (require("app.js")) {

    …

}

[1]:并非處于ES5.1 嚴格模式下 -建議進行優化


查看完整回答
反對 回復 2019-09-27
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

好吧,我的項目基本上是在JS,像頂部的解釋coffee-script,我想有一個變量DATADATAG.DATA在測試過程中。到目前為止,我在同一app.js文件中有一個測試代碼,但是如果可能的話,我想將對象(在這種情況下G)中的變量導出到單獨的文件-中test.js。

查看完整回答
反對 回復 2019-09-27
  • 2 回答
  • 0 關注
  • 870 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號