javascript - 如何从 JavaScript 中的工厂函数返回不可变对象
问题描述
我有一个基本函数接受温度数据作为参数,然后对数据执行简单的温度转换操作我们如何在不改变对象的情况下执行相同的功能?即,函数不应该改变传入的参数,而应该返回一个副本
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
}
推荐阅读
- javascript - Vue类与字符串绑定?
- php - adobe muse 表单不发送电子邮件
- jpa - 我们如何从 spring data jpa 中获取选定的列列表?
- ios - 目标 C 函数未在 swift 类中调用
- c# - 如何获取 app.config 中所有连接字符串的列表
- python-3.x - 我如何在 tkinter 中单独控制每个按钮
- javascript - 使用jquery动画角度5动画方式(平滑滚动)
- spring - 当我使用 @Requestbody 时,我从带有 @Data 的实体中得到了 null
- java - 类型转换和泛型类型
- c++ - 了解复制构造函数和引用