[英]Nodejs: Don't run `new class` with export
這是我的配置:
const one = new one()
const two = new two()
export default {
one,
two
}
這是我的課程:
export class one {
constructor () {
console.log("one");
}
}
export class two {
constructor () {
console.log("two");
}
}
這是我的設置:
import runner from "./";
runner.one
為什么在調用runner.one
之后, runner.two
也在運行?!
我只想跑runner.one
它發生在這里:
const one = new one()
const two = new two()
因為您在兩個類的constructor()
方法中定義了console.log
當您調用new ClassNameHere()
時,它會執行constructor()
您可以簡單地導出類而不是實例化它們:
跑者.mjs
export class one {
constructor () {
console.log("one");
}
}
export class two {
constructor () {
console.log("two");
}
}
執行器.mjs
import * as runners from "./runners";
const one = new runner.one();
或名稱類 CapitalizedCamelCased:
跑者.mjs
export class RunnerOne {
constructor () {
console.log("one");
}
}
export class RunnerTwo {
constructor () {
console.log("two");
}
}
執行器.mjs
import {RunnerOne} from "./runners";
const one = new RunnerOne();
很高興,因為您正在使用const
說明符全局實例化它們。
執行此操作時,代碼會在遇到實例化( new
關鍵字)時立即調用每個類的構造函數。
const one = new one()
const two = new two()
export default {
one,
two
}
如果這不是您想要的,並且您希望它們分別初始化,則可以有多種方法來實現。
一種是在訪問它們之前單獨實例化它們。 (您可以在仍然需要訪問實例化對象的類中的實例化對象的情況下使用它)。 像這樣:
包含一和二的類:
(假設您在文件onetwo.mjs
中定義您的類)
import * as ot from "./onetwo.mjs";
let one;
let two;
function instantiateOne() {
one = new ot.one();
}
function instantiateTwo() {
two = new ot.two();
}
export default {
one,
two,
instantiateOne, // expose methods needed to create instances
instantiateTwo,
}
上面使用的類:
import runner from "./";
runner.instantiateOne(); // this will only create instance of 'one'
runner.one; // accessing one
當然還有其他方法,可能需要更多更改才能使其在您的項目中工作,但這是其中一種模式。 請注意,在使用這種策略時,您要么總是在使用對象( one
或two
)之前檢查它們是否已被實例化,要么確保在開始時就這樣做。
注意:這只是給你一個想法。 這不是一個具體的實現。 如果你確實想實現這樣的東西,你必須處理所有邊緣情況(例如,防止重新初始化等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.