gpt4 book ai didi

javascript - OO JavaScript,我该如何改进这个类?有没有更好、更干净的方法?

转载 作者:行者123 更新时间:2023-12-03 00:52:28 24 4
gpt4 key购买 nike

我有一个函数,它可以接受多个参数。

function formatString(Number, option1, option2, option3, option4, option5) {
// apply options to the string:
// eg: format to '0.00', append "+", append £ sign etc
// return formatted Number as String
}

所有选项都是可选的,因此它开始变得有点难以使用和理解它的作用:

formatString(value, null, true, currency, null, true) // thats bad

所以我开始思考如何让它更容易使用、扩展和理解。我想出了一个类(class):

export default class Amount {
constructor(value) {
this.value = value;
}

set coin(val) {
this._coin = val;
}

set currency(val) {
this._currency = val;
}

set format(format) {
this._format = format;
}

set withCurrencySymbol(val) {
this._withCurrencySymbol = val;
}

set prependPlusOrMinus(val) {
this._prependPlusOrMinus = val;
}

get formatted() {
let { value } = this;
if (this._coin && this._currency) {
value = this.coinToCurrency(this.value, this._coin, this._currency);
}

let formatted = `${numeral(Math.abs(value)).format(this._format)}`;
if (this._currency) formatted = `${currencySymbols[this._currency]}${formatted}`;

if (this._prependPlusOrMinus) {
if (value < 0) return `&#45; ${formatted}`;
if (value > 0) return `&#43; ${formatted}`;
}

return formatted;
}

coinToCurrency() {
const { rate } = exchangeRates[this._coin].find(item => item.currency === this._currency);
return this.value * rate;
}
}

它使使用更容易:

  const amount = new Amount(value);
amount.currency = currency;
amount.format = format;
console.log(amount.formatted);

您只需设置您想要设置的选项,更容易一目了然。

我想知道有没有更好的方法?有什么建议吗?

谢谢!

最佳答案

我认为最好将参数作为对象传递,{value:val,currency:cur...}。并在构造函数中使用默认配置来减少使用此类时要输入的参数数量。

这是一个包含一个属性的示例,您可以对其他属性执行相同的操作

class Amount {
constructor(opt){
const defaultOpts= {currency:'$'}
this.opts=Object.assign(defaultOpts,opt)
}

getValueWithCurruency(){
return this.opts.value+this.opts.currency
}

}

const foo= new Amount({value:50})
console.log(foo.getValueWithCurruency())//50$

const fooEuro= new Amount({value:50,currency:"€"})
console.log(fooEuro.getValueWithCurruency())//50€

关于javascript - OO JavaScript,我该如何改进这个类?有没有更好、更干净的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com