3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
你的代碼在 JS 中編譯成這個(gè)(我為 B 添加了類(lèi) def):
class B {
}
class A {
constructor(b2) {
this.b2 = b2;
this.b1 = new B();
}
}
除非您使用反射庫(kù)或添加注釋?zhuān)駝t這是您必須使用的。因此,據(jù)我所知,沒(méi)有任何 API 可以簡(jiǎn)單地為構(gòu)造函數(shù)輸出參數(shù)名稱(chēng)。
如果您仍然想繼續(xù)并且不想投入大量資金,那么這個(gè)的廉價(jià)版本可能只是在輸出上使用一些足夠聰明的正則表達(dá)式A.toString()來(lái)檢測(cè)參數(shù)名稱(chēng)并將它們與A.

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
不,沒(méi)有辦法做到這一點(diǎn)。
請(qǐng)注意,區(qū)別比您想象的還要模糊:一個(gè)構(gòu)造函數(shù)參數(shù)值可能是專(zhuān)門(mén)為該實(shí)例創(chuàng)建的,由它擁有 ( new A(new B())
),或者在 的構(gòu)造函數(shù)中創(chuàng)建的對(duì)象A
稍后可能會(huì)在它之后共享已從外部訪(fǎng)問(wèn) ( new C(a.b1)
)。如果你想決定一個(gè)對(duì)象是否被你的A
實(shí)例“擁有”,你需要在你的類(lèi)的文檔中描述這個(gè)契約(即它的構(gòu)造函數(shù),以及可能返回一個(gè)字段的方法/訪(fǎng)問(wèn)器)。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果我們需要 smth owned 這意味著它應(yīng)該被封裝并且不能公開(kāi)使用。我對(duì)你的提議是明確地說(shuō) b1 是一個(gè)私有字段。但是關(guān)于哪個(gè)屬性是在構(gòu)造函數(shù)本身中初始化的以及哪個(gè)屬性是在字段定義級(jí)別是未知的。
添加回答
舉報(bào)