2016-03-30 12 views
1

Bir nesne özelliğinin değerini diğerinin değerine bağlamak için bir yol var mı?Bir javascript object özelliği, aynı nesnenin başka bir özelliğine nasıl bağlanır?

Fikir, istisnai bir arayüz gibi bir şey var, bu yüzden benim için propertys.name ve .value ihtiyacım var. Bu özel durum adına kolayca değerinden inşa edilmiştir (değer bir dizidir ve adı array.toString() ise) yerine değerin obj.value.toString() kullanabilirsiniz

ama kod tüm durumlar için çalışmasını sağlamak için obj.name kullanması gerekir.

Bu kodu denedim, ancak istediğim sonucu üretmiyor. İstenilen davranışa nasıl ulaşabilirim?

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

cevap

5

Sen gerekirse Hatta bu uzatabilirsiniz getter.

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

bir bir setter kullanmak için kullanabilirsiniz.

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'in alıcılar olduğunu bilmiyordum. Çok teşekkür ederim! – Sergej

0

bir şeyler yapmak adına gerekiyorsa, bir işlev gerekir:

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


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

[ "foo", "bar"]
foo, bar

+0

bu işe yaramaz çünkü obj.name() kullanmanız gerekir. Kodlarım bir özellik değil bir işlev beklediğinden parantez kullanamam. Bu işe yarayabilirdi, ancak bunun için tüm kodları değiştirmeliyim. Yukarıdaki cevap benim sorunumu mükemmel bir şekilde çözer – Sergej

0

Hayır. Nesnenin başlatılmasıyla bir özelliğe erişemezsiniz. Bununla birlikte, objenin oluşturulmasından sonra da ayarlayabilirsiniz.

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

Yukarıdaki çözüm hile yapar. Cevabınız benim için çalışmaz çünkü değeri ve adı eşzamanlı olarak elle tutmam gerekecek ... – Sergej

+0

Sadece, bu getter yöntemindeki boş değerde bir kontrol yaptığınızdan emin olun. –

İlgili konular