簡體   English   中英

在JavaScript中,是否可以使用與類函數同名的類getter?

[英]In JavaScript, is it possible to have a class getter with the same name as a class function?

我知道這可能是反模式,但是我很好奇某些JavaScript庫如何能夠將JavaScript函數與可選的括號鏈接起來(例如, 粉筆

一個例子是...

let test = (new SomeClass()).initiate.parse(1).end;
let test = (new SomeClass()).initiate(1).parse.end;

有辦法嗎? 我想過,也許試圖用干將要做到這一點,但get initiate() SomeClass的的是由類函數重載initiate()

不,不可能有一個具有相同名稱的吸氣劑和方法。

您可以實現自己想要的。 一種方法是在您的getter中使用Proxy進行代理,以便在訪問其他屬性時,改為訪問原始對象的該屬性。

 class SomeClass { get initiate ( ) { console.log( `Accessed initiate` ); return new Proxy( x => { console.log( `Called initiate with arg ${x}` ); this.stored = x; return this; }, { get: (_,prop) => this[prop] } ); } get parse ( ) { console.log( `Accessed parse` ); return new Proxy( x => { console.log( `Called parse with arg ${x}` ); this.stored = x; return this; }, { get: (_,prop) => this[prop] } ); } get end ( ) { return this.stored; } } console.log( (new SomeClass).initiate(2).parse.end ); console.log( (new SomeClass).initiate.parse(3).end ); console.log( (new SomeClass).initiate(5).parse(7).end ); 

我強烈建議您看一下chai或其他斷言庫如何做到這一點。 對於代碼,您正在尋找,可以在這里查看

他們要做的是定義一個Assertion類,並分別定義方法和屬性。 從那里開始, 它們使用您所提到的getter來實現您要對屬性執行的操作,但是它們還將方法分開(請參見addMethod

您可以查看的另一個問題是,Chai中的Expect()。to.be.true如何工作的? 那里接受的答案有一個代碼示例,說明如何獲得一些基本的工作。

我將盡全力使方法和屬性具有相同的名稱。 這會使許多將您的班級用作消費者的人感到困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM