[英]Typescript can class methods allow method chaining without returning 'this'?
我制作了一個Mycalculator類,該類實現了以下計算器接口以實現方法鏈接。
interface Calculator {
add(a: number): void
sub(a: number): void
div(a: number): void
mul(a: number): void
display(decimalToDisplay: number): void
allClear(): void
reset(value: number): void
}
class MyCalculator implements Calculator {
private _current: number;
constructor(public value: number) {
this._current = value
}
add(a: number): MyCalculator {
this.current += a
return this
}
sub(a: number): MyCalculator {
this.current -= a
return this
}
div(a: number): MyCalculator {
this.current /= a
return this
}
mul(a: number): MyCalculator {
this.current *= a
return this
}
get current (): number {
return this._current
}
set current (result: number) {
this._current = result
}
reset (value: number) {
this.current = value
return this
}
display(decimalToDisplay: number = 2): MyCalculator {
console.log(this.current.toFixed(decimalToDisplay))
return this
}
allClear(): MyCalculator {
this.current = 0
return this
}
}
// Test
new MyCalculator(3).add(5).mul(5).div(3).div(3).display() // 4.44
new MyCalculator(5).add(5).mul(5).div(5).display().allClear().reset(5).add(5).display() // 10.00, 10.00
在上面的代碼中,我有一些問題
return this
方法嗎? 謝謝你的幫助!
你做對了。 返回此方法是實現方法鏈接的正常方法。 但是有一些問題。 方法應為接口類型。
interface Calculator {
add(a: number): Calculator
sub(a: number): Calculator
div(a: number): Calculator
mul(a: number): Calculator
display(decimalToDisplay: number): void
allClear(): void
reset(value: number): void
}
即使在實現此接口時,結果類型也是Calculator。 您想要的就是多態性。 該方法的調用者只需要一些計算器作為結果,獲取哪種實現並不重要。 因此,這種方法的一個示例如下所示:
class MyCalculator implements Calculator {
// ...
add(a: number): Calculator {
this.current += a
return this
}
// ....
}
但請注意,您的計算器無法正常工作。 1 + 2 * 3與1 +(2 * 3)相同,但是您的計算器會將其視為(1 + 2)*3。也許您不希望這種行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.