繁体   English   中英

如何从 JavaScript 中的工厂 function 返回一个不可变的 object

[英]How to return an Immutable object from a factory function in JavaScript

我有一个基本的 function 接受温度数据作为参数,然后对数据执行简单的温度转换操作我们如何在不改变 object 的情况下执行相同的功能? 即,function 不应该改变传入的参数,它应该返回一个副本

 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 object 看起来像这样:

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

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM