Javascript ile gelen native
fonksiyonlardan biridir.
Ama çalışması pek öyle sıradan fonksiyonlar gibi değildir. Sahip olduğu özellikler, dile bazı yeni işlevsellikler ekleyebilecek kapasitededir. Üstelik getirdiği özellikleri
polyfill edemeyiz. Çünkü
syntactic sugar değil native özellikler sağlamaktadır ve bunları elde olan yöntemlerle yazıp eski tarayıcıların da bu özellikleri desteklemesini sağlamanın bir yolu bulunmuyor.
Gelen özelliklerden en bilineni getter ve setter vekil metotlarıdır. Aslında javascript'te bir süredir zaten property'ler için getter ve setter vekil metotlar tanımlayabiliyorduk ancak sadece adı bilinen bir metot veya property için bu olabiliyordu. Yani dinamik biçimde bir nesnenin herhangi bir property/method'u okunmak veya yazılmak istendiğinde bu istekleri işlemesi için yönlendirebileceğimiz genel bir metot tanımlayamıyorduk.
Bu metot, kendisine verilen herhangi bir nesneye, adına yakışır şekilde vekalet ederek bu tür özellikleri kazandırıyor.
var reaktif_nesne =
{
foo: "bar"
}
reaktif_nesne = new Proxy( reaktif_nesne,
{
get: function<bkz type="short" space="
"> reaktif_nesne, property_name </bkz>{
console.log<bkz type="short" space=""> "erişilen property adı: " + property_name </bkz>;
}
});
console.log<bkz type="short" space=""> reaktif_nesne.foo </bkz>;
// erişilen property adı: foo
// bar
Artık reaktif_nesne nesnesi dışarıdan direkt biçimde erişilebilir değildir. Onun yerine o nesneyi temsil eden bir proxy nesnesine sahibiz. Derdimizi bu vekil nesneye anlatıyoruz, o da vekalet ettiği nesneye durumu yansıtıyor. Kod yazım şeklimizde ise aslında değişen hiçbir şey yok. Eskiden olduğu gibi direkt property'lere ve metotlara erişebilir onlara yazmaya devam ediyoruz. Tüm bu vekalet işleri kaputun altında bize hissettirilmeden gerçekleşiyor.