2016-03-30 15 views
1

1つのオブジェクトプロパティの値を別のオブジェクトプロパティの値にリンクする方法はありますか?JavaScriptオブジェクトプロパティを同じオブジェクトの別のプロパティにリンクするにはどうすればいいですか?

アイデアは、除外されたインターフェイスのようなものなので、objにはpropertys.name.valueが必要です。名前は簡単に値から構築されたこの特別な場合(値が配列され、名前がarray.toString()です)

で、私はobj.value.toString()代わりの値を使用することができますが、コードは、それはすべてのケースのために動作させるためにobj.nameを使用する必要があります。

私はこのコードを試しましたが、私が望む結果が得られません。どのようにして希望の行動を達成することができますか?

obj = {value: array, name: this.value.toString()} 

答えて

5

あなたは必要であればあなたも、これを拡張することができgetter.

var obj = { 
    value: array, 
    get name() { 
    return this.value.toString(); 
    } 
}; 
console.log(obj.value.toString() === obj.name); // true 

setterを使用するために使用することができます。

var obj = { 
    value: array, 
    get name() { 
    return this.value.toString(); 
    }, 
    set name(val) { 
    this.value = val.split(','); // or any other operation you may need 
    } 
}; 
obj.name = '1,2,3'; 
console.log(obj.value); // ['1', '2', '3'] 
+3

私は、javascriptがゲッターを持っていたことを知らなかった。どうもありがとうございました! – Sergej

0

あなたが何かをする名前が必要な場合は、機能を必要とするだろう:

obj = {value: ['foo','bar'], name: function() { return this.value.toString() }} 


console.log(obj.value) 
console.log(obj.name()) 

[ "foo" という、 "バー"]
FOO、バー

+0

obj.name()を使用する必要があるため、これは機能しません。私のコードは関数ではなくプロパティを期待しているので、中括弧は使用できません。これはうまくいくかもしれませんが、私はこのためにすべてのコードを変更する必要があります。上記の答えは私の問題を完全に解決します。 – Sergej

0

いいえ。オブジェクトの初期化時にプロパティにアクセスすることはできません。ただし、objの作成後に設定することはできます。

obj = {value: array, name:null} 
obj.name = obj.value.toString(); 
+0

上記の解決策はまあまあです。私は手動で値と名前を同期して保持しなければならないので、あなたの答えは私のために働いていません... – Sergej

+0

ちょうどあなたがそのゲッターメソッドで値のnullチェックを行うことを確認してください。 –