构造具有复杂结构的Javascript对象?

构造具有复杂结构的Javascript对象?,javascript,constructor,Javascript,Constructor,我有一个具有这种结构的对象,我在代码中实例化了它 costs: { totalPerYear, totalEver, perMonth: { items: { depreciation, insurance, credit, inspection, roadTaxes, fuel, mai

我有一个具有这种结构的对象,我在代码中实例化了它

costs: {
    totalPerYear,
    totalEver,

    perMonth: {
        items: {
            depreciation,
            insurance,
            credit,
            inspection,
            roadTaxes,
            fuel,
            maintenance,
            repairsImprovements,
            parking,
            tolls,
            fines,
            washing
        },
        standingCosts,
        runningCosts,
        total
    },

    perUnitDistance: { 
        runningCosts,
        totalCosts
    }
}
我一直在和。为了简洁起见,有没有一种方法可以让这个对象有一个构造函数,其中所有变量都设置为
undefined
,就像我们定义变量
var x时发生的那样

我有一个显而易见的解决办法

function Costs(){
    this.totalPerYear = undefined;
    this.totalEver = undefined;

    this.perMonth = {
        items: {
            depreciation: undefined,
            insurance: undefined,
            credit: undefined,
            inspection: undefined,
            roadTaxes: undefined,
            fuel: undefined,
            maintenance: undefined,
            repairsImprovements: undefined,
            parking: undefined,
            tolls: undefined,
            fines: undefined,
            washing: undefined                        
        },
        standingCosts: undefined,
        runningCosts: undefined,
        total: undefined
    };

    this.perUnitDistance = { 
        runningCosts: undefined,
        totalCosts: undefined
    };
};

var userCosts = new Costs();

您使用哪些技术来创建具有复杂结构的对象?

如果您只想要一个对象,而不需要它具有特殊的原型,那么返回对象而不是构造函数的函数非常简单:

function costs() {
    return {
        costs: {
            totalPerYear: undefined,
            totalEver: undefined,

            perMonth: {
                items: {
                    depreciation: undefined,
                    insurance: undefined,
                    credit: undefined,
                    inspection: undefined,
                    roadTaxes: undefined,
                    fuel: undefined,
                    maintenance: undefined,
                    repairsImprovements: undefined,
                    parking: undefined,
                    tolls: undefined,
                    fines: undefined,
                    washing: undefined
                },
                standingCosts: undefined,
                runningCosts: undefined,
                total: undefined
            },

            perUnitDistance: { 
                runningCosts: undefined,
                totalCosts: undefined
            }
        }
    };
}
例如:

功能成本(){
返回{
费用:{
每年总计:未定义,
totalEver:未定义,
每月:{
项目:{
折旧:未定义,
保险:未定义,
信用:未定义,
检查:未定义,
道路税:未定义,
燃料:未定义,
维护:未定义,
维修改进:未定义,
停车:未定义,
通行费:未定义,
罚款:未定义,
洗涤:未定义
},
固定成本:未定义,
运行成本:未定义,
总数:未定义
},
距离:{
运行成本:未定义,
总成本:未定义
}
}
};
}
console.log(costs())
。作为控制台包装器{
最大高度:100%!重要;

}
如果您只想要一个对象,而不需要它有一个特殊的原型,那么返回对象而不是构造函数的函数非常简单:

function costs() {
    return {
        costs: {
            totalPerYear: undefined,
            totalEver: undefined,

            perMonth: {
                items: {
                    depreciation: undefined,
                    insurance: undefined,
                    credit: undefined,
                    inspection: undefined,
                    roadTaxes: undefined,
                    fuel: undefined,
                    maintenance: undefined,
                    repairsImprovements: undefined,
                    parking: undefined,
                    tolls: undefined,
                    fines: undefined,
                    washing: undefined
                },
                standingCosts: undefined,
                runningCosts: undefined,
                total: undefined
            },

            perUnitDistance: { 
                runningCosts: undefined,
                totalCosts: undefined
            }
        }
    };
}
例如:

功能成本(){
返回{
费用:{
每年总计:未定义,
totalEver:未定义,
每月:{
项目:{
折旧:未定义,
保险:未定义,
信用:未定义,
检查:未定义,
道路税:未定义,
燃料:未定义,
维护:未定义,
维修改进:未定义,
停车:未定义,
通行费:未定义,
罚款:未定义,
洗涤:未定义
},
固定成本:未定义,
运行成本:未定义,
总数:未定义
},
距离:{
运行成本:未定义,
总成本:未定义
}
}
};
}
console.log(costs())
。作为控制台包装器{
最大高度:100%!重要;

}
this.totalPerYear:undefined
是无效语法
应该是
=
。您需要对象具有任何特定原型吗?@Barmar您是对的,相应地修改了
this.totalPerYear:未定义的
语法无效
应该是
=
。您需要对象具有任何特定的原型吗?@Barmar您是对的,已修改accordingly@JoãoPimentelFerreira和我认为像这样的对象文字也会更有效。我以为他在寻找一种方法来避免在每一行上都写
:未定义的
。也许可以通过解构任务来实现这一点?@Barmar-哦,这是一个有趣的想法。我不确定它是否有效,但试试看@Barmar-您不能将其分解为这样的属性,只能分解为变量。@JoãoPimentelFerreira-是的,但是您没有重复
未定义的
,而是重复属性的名称:
让foo;返回{foo}:-)@JoãoPimentelFerreira,我认为像这样的对象文字也会更有效。我以为他在寻找一种方法,避免在每一行上都写
:未定义的
。也许可以通过解构任务来实现这一点?@Barmar-哦,这是一个有趣的想法。我不确定它是否有效,但试试看@Barmar-您不能将其分解为这样的属性,只能分解为变量。@JoãoPimentelFerreira-是的,但是您没有重复
未定义的
,而是重复属性的名称:
让foo;返回{foo}:-)