Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象键作为参数的可读方式_Javascript_Object - Fatal编程技术网

Javascript 使用对象键作为参数的可读方式

Javascript 使用对象键作为参数的可读方式,javascript,object,Javascript,Object,我使用对象的键和值填充其他对象,如下所示: var default_columns = { column_a: 'value_a', column_b: 'value_b', column_c: 'value_c' // [...] } var new_object = {}; for (var key in default_columns) { new_object[key] = default_columns[key]; } 但后来在我的程序中,我想继续使

我使用对象的键和值填充其他对象,如下所示:

var default_columns = {
    column_a: 'value_a',
    column_b: 'value_b',
    column_c: 'value_c'
// [...]
}

var new_object = {};
for (var key in default_columns) {
    new_object[key] = default_columns[key];
}
但后来在我的程序中,我想继续使用这些键作为参数。我可以这样做:
new\u object['column\u a']
,但是如果我在
default\u columns
中更改
'column\u a'
,我需要在代码中的任何地方更新它

我想这样定义我的对象:

var default_columns = {
    a: { k: 'column_a', v: 'value_a' },
    b: { k: 'column_b', v: 'value_b' },
    c: { k: 'column_c', v: 'value_c' }
}
并按如下方式对其进行迭代:

var new_object = {};
for (var key in default_columns) {
    new_object[default_columns[key].k] = default_columns[key].v;
}
这也允许我将键用作参数(
新对象[default\u columns.a.k]
),同时让我有机会更改
默认列中的键(例如
'column\u a'
'my\u column\u a'
),而无需更新代码


有没有一种更具可读性的方法来实现我试图通过第二种方法实现的目标?

在我看来,原型继承就是你想要的。使用
object.extend
将所有属性从
default\u列
复制到
new\u对象
,而不是将它们彼此继承()

然后,您可以覆盖
新\u对象
上的某些列,这将对继承的属性进行阴影处理


虽然您的目标是轻松重命名属性,但我还是选择第二种方法。在普通对象上重命名意味着两行代码:复制到新对象和删除旧对象。如果在任何地方都使用一组对象,您只需更改对象的“键”属性,它将反映到引用此特定对象的任何地方


请注意,您创建新对象的迭代不会反映更改,因为
k
v
被取消引用。

这是一个稍微复杂的问题。通过这种方式改变对象,你可以说出你想要实现的目标。您的程序的目标是什么?我试图实现的是使用对象(因为遍历对象可以重复使用代码),同时能够重命名这些对象的键,而无需更新这些键用作参数的代码的其余部分。原因是我的JavaScript代码具有外部依赖关系(这些对象用于定义CSS库的类、网格插件的列…),这些依赖关系经常更改,我希望在发生此类更改时,仅在一个地方(对象键)相应地更新代码一次,以防止代码中断。
var new_object = Object.create(default_columns);

// or, in other words:

function Columns(){}
/* var default_columns = */ Columns.prototype = {
    column_a: 'value_a',
    ...
};

var new_object = new Columns();