ES6 ile birlikte nesne içindeki değişkenler, prototype, süper ve dinamik özellikler konusunda yenilikler görülmektedir. Bu bölüm nesne üzerindeki yenilikler üzerinedir. İki değişkenimizi bir nesne içine değer olarak gönderme işlemi ile başlayalım. ES5’te:
1 2 |
var x = 0, y = 0; obj = { x: x, y: y }; |
var ile tanımlanan değerleri atamak için x: x şeklinde bir tanımla yapılabilir. Burada ilk x obj’nin x’i iken (degisken ismi), ikinci x ise var değişkeninden gelen sayısal değerdir. ES6 ile birlikte bu atamaya gerek kalmadan örnekteki gibi bir kullanım yapılabilir.
1 2 |
var x = 0, y = 0 obj = { x, y } |
Kod yazmayı azaltıcı bir işlem ancak yapı olarak ES5 ile aynı sonucu verir. Özellikle JSON dosyaları oluşturmanızda daha rahat bir kullanım imkanı sağlar.
Prototype
Bir başka nesnenin özelliklerini kalıtım ile almak için prototype kullanılır. Object’i class ile karıştırmayın. Object değerleri olan bir değişkendir. Örneğin,
1 2 3 |
const nesne1 = { y: 'y' } const nesne2 = { __proto__: nesne1} |
nesne2, nesne1’in tüm özelliklerini “__proto__: nesne1” satırı sayesinde almıştır.
super
Nesne içinde fonksiyonda olabilir ve üst nesnedeki fonksiyon super ifadesi ile çağrılabilir.
1 2 3 4 5 6 7 8 |
const nesne1 = { y: 'y', test: () => 'node' } const nesne2 = { __proto__: nesne1, test() { return super.test() + '.js' } } x.test() //node.js |
test fonksiyonu ilk nesnede node değerini döndürürken ikinci nesnede proto üzerinden bağlantı kurduğu nesnedeki test() fonksiyonunu çağırıp üzerine “.js” uzantısını ekler.
Dinamik Özellikler
Nesne içindeki değişken ismini string bir ifade üzerinden oluşturabilirsiniz. Örneğin,
1 2 3 4 |
const nesne1 = { ['a' + '_' + 'b']: 'z' } x.a_b //z |
a_b değişken ismi string birleştirmesi ile elde edilmiştir. x.a_b şeklinde bir çağırma işleminde “z” string değeri döner.