2016-03-30 71 views
1

有沒有辦法將一個對象屬性的值鏈接到另一個對象的值?如何將javascript對象屬性鏈接到同一對象的另一個屬性?

這個想法是,我有一個像一個例外的界面,所以我需要propertys.name.value爲我的OBJ。在這種特殊情況下的名字很容易從價值構成(值是一個數組,並將其命名爲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有getters。非常感謝你! – Sergej

0

如果你需要的名字做一些事情,你需要一個功能:

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


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

[ 「富」, 「酒吧」]
FOO,酒吧

+0

這不起作用,因爲您必須使用obj.name()。而且我不能使用大括號,因爲我的代碼期望屬性不是函數。這可以工作,但我將不得不改變我的所有代碼。上面的答案完美地解決了我的問題 – Sergej

0

不可以。初始化對象時無法訪問屬性。但是,您可以在創建obj後設置它。

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

以及上述解決方案的伎倆。您的答案對我無效,因爲我必須手動將值和名稱保持同步...... – Sergej

+0

只要確保您在該getter方法中對值進行了空值檢查。 –

相關問題