gpt4 book ai didi

javascript - 初始化需要多个静态值的 JavaScript 对象的替代/更好的方法?

转载 作者:行者123 更新时间:2023-12-02 22:40:39 25 4
gpt4 key购买 nike

我有一个 JavaScript 对象,其中包含一些静态属性值、动态属性值和方法。每次我需要这些对象中的一个时,我将需要其中的 10 个。这 10 个对象中的每一个都由专用的对象文字进行初始化。当用户在数据输入表单上执行某些操作时,会在 3 种不同的上下文中发生这种情况。用户操作可以导致上下文以任意顺序、任意次数发生,但每个上下文中始终会创建相同的 10 个对象。我所说的“相同”是指每次创建“no_matl”对象时,“no_matl”对象的静态值都是相同的......只有一些动态属性值(字段值、先前值、日期/时间、上下文 ID)每个上下文都不同。

是否有更智能的方法来完成当前使用 const 对象文字完成的初始化?最初,我将一堆参数传递给构造函数,并从中初始化静态属性。对象字面量方法看起来更干净。也许有更好的方法?

// object literals used to initialize a each of the 10 
// different type objects.
const FIELD_NOMATERIAL = {
DispName: 'No Material',
DbName: 'NO_MATERIAL',
TrueVal: 'Yes',
InitVal: '',
DispWhenSet: 'yes',
DispWhenNotSet: ''
};

const FIELD_CPCAT = { ... same attributes, different values ...};

const FIELD_HCN = { ... same attributes, different values ...};
// ... 7 more like this ...

// context 1
var no_matl = new MyField(FIELD_NOMATERIAL),
cpcap = new MyField(FIELD_CPCAT),
hcn = new MyField(FIELD_HCN) .... 7 more like this

// object definition
function MyField() {
if (arguments.length == 1 && typeof(arguments[0]) === 'object' ) {
this.DispName = arguments[0].DispName ;
this.DbName = arguments[0].DbName ;
// .... etc for rest of static attributes ...
}
}

最佳答案

听起来您想要的是原始对象的副本,它可以更改值而不更改原始对象。试试这个:

const FIELD_NOMATERIAL = {
DispName: 'No Material',
DbName: 'NO_MATERIAL',
TrueVal: 'Yes',
InitVal: '',
DispWhenSet: 'yes',
DispWhenNotSet: ''
};

function getFreshCopy(original) {
return Object.assign({}, original);
}

var no_matl = getFreshCopy(FIELD_NOMATERIAL);

使用Object.assign({}, obj)将创建一个新的副本,可以在不更改原始值的情况下更改该副本。 no_matl 可以调整,FIELD_NOMATERIAL 保持其原始状态。

请注意,const 表示不能为该变量分配新值。这并不意味着对象的内容不能更改。这意味着以下内容是正确的:

const noChange = { a: 7 };
noChange.a = 8; // this is fine because 'a' is allowed to change
noChange = "hello"; // this gives TypeError: Assignment to constant variable.

关于javascript - 初始化需要多个静态值的 JavaScript 对象的替代/更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601310/

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