2016-03-30 35 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方法中对值进行了空值检查。 –

相关问题