如何 return JavaScript 中工厂函数的不可变对象
How to return an Immutable object from a factory function in JavaScript
我有一个基本函数接受温度数据作为参数,然后对数据进行简单的温度转换操作
我们如何在不改变对象的情况下执行相同的功能?也就是说,函数不应该改变传入的参数,它应该 return 一个副本
function temperature(args) {
convertToF = convertToC = temperatureConverter
return Object.assign({
args,
convertToF,
convertToC
}, w.weatherData(args))
}
我有一些帮助函数来帮助转换
function temperatureConverter(args) {
const bool = args.unit === 'F'
return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
}
function Celsiusconverter(args) {
args.value = (args.value - 32) * (5 / 9)
args.unit = 'C'
return {
...args
}
}
function fahrenheitConverter(args) {
args.value = (args.value * 9 / 5 + 32)
args.unit = 'F'
return {
...args
}
}
args 对象如下所示:
const objTemp1 = {
unit: 'C',
type: 'Temp',
date: '2010-04-20T00:00:00.000Z',
place: 'someCity',
value: 10,
}
函数看起来像这样,问题就解决了
function temperatureConverter(args) {
const bool = newArgs.unit === 'F'
return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
}
function Celsiusconverter(args) {
newArgs = {...args}
newArgs.value = (newArgs.value - 32) * (5 / 9)
newArgs.unit = 'C'
return newArgs
}
function fahrenheitConverter(args) {
newArgs = {...args}
newArgs.value = (newArgs.value * 9 / 5 + 32)
newArgs.unit = 'F'
return newArgs
}
我有一个基本函数接受温度数据作为参数,然后对数据进行简单的温度转换操作 我们如何在不改变对象的情况下执行相同的功能?也就是说,函数不应该改变传入的参数,它应该 return 一个副本
function temperature(args) {
convertToF = convertToC = temperatureConverter
return Object.assign({
args,
convertToF,
convertToC
}, w.weatherData(args))
}
我有一些帮助函数来帮助转换
function temperatureConverter(args) {
const bool = args.unit === 'F'
return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
}
function Celsiusconverter(args) {
args.value = (args.value - 32) * (5 / 9)
args.unit = 'C'
return {
...args
}
}
function fahrenheitConverter(args) {
args.value = (args.value * 9 / 5 + 32)
args.unit = 'F'
return {
...args
}
}
args 对象如下所示:
const objTemp1 = {
unit: 'C',
type: 'Temp',
date: '2010-04-20T00:00:00.000Z',
place: 'someCity',
value: 10,
}
函数看起来像这样,问题就解决了
function temperatureConverter(args) {
const bool = newArgs.unit === 'F'
return (bool) ? self.Celsiusconverter(args) : self.fahrenheitConverter(args)
}
function Celsiusconverter(args) {
newArgs = {...args}
newArgs.value = (newArgs.value - 32) * (5 / 9)
newArgs.unit = 'C'
return newArgs
}
function fahrenheitConverter(args) {
newArgs = {...args}
newArgs.value = (newArgs.value * 9 / 5 + 32)
newArgs.unit = 'F'
return newArgs
}