0

オブジェクトのキーと値を使用して、次のように他のオブジェクトにデータを入力しています。

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_object['column_a']しかし、私が変更'column_a'した場合default_columns、コードのどこでもそれを更新する必要があります.

私は自分のオブジェクトを次のように定義することを考えました:

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;
}

これにより、キーをパラメーター ( ) として使用できるようになり、コードを更新することなくキーを (たとえばに)new_object[default_columns.a.k]変更する機会が与えられます。'column_a''my_column_a'default_columns

2番目のアプローチで達成しようとしていることをより読みやすくする方法はありますか?

4

1 に答える 1

1

プロトタイプの継承があなたが望むものであるように私には思えます。default_columnsすべてのプロパティを からにコピーする代わりにnew_objectObject.extend相互に継承させます ( Object.create)。

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();

その後、 のいくつかの列を上書きできますnew_object。これにより、継承されたプロパティがシャドウされます。


プロパティの名前を簡単に変更することが目的の場合は、2 番目の方法を使用します。通常のオブジェクトの名前変更は、2 行のコードを意味します: 新規にコピーし、古いものを削除します。どこでも使用されるオブジェクトのセットでは、オブジェクトの「キー」プロパティを変更するだけで、この特定のオブジェクトが参照されるすべての場所に反映されます。

kおよびv逆参照されるため、新しいオブジェクトを作成するための反復は変更を反映しないことに注意してください。

于 2012-07-25T10:27:22.177 に答える