this Deyimi ile Nesnenin Kendini Referans Etmesi
Nesnelerin metotlarını işlevsel hale getirmek için nesnenin kendini referans etmesi çok kıymetlidir. Önceki örneklerden dönüştürelim.
let ogrenci = {
no:2301,
isim:'Asya',
sinif:7,
kendiniTanit() {
return `Ben ${this.isim}, numaram ${this.no}, sinifim ${this.sinif}`;
}
};
alert( ogrenci.kendiniTanit() ); // Asya öğrencisinin bilgileri
let yeniOgrenci = Object.assign( {}, ogrenci );
yeniOgrenci.no = 1491;
yeniOgrenci.isim = 'Ali';
yeniOgrenci.sinif = 8;
alert( yeniOgrenci.kendiniTanit() ); // Ali öğrencisinin bilgileri
Nesnenin adı yerine this
deyimi ile nesnenin kendisini referans ettik. Metotları haricen oluşturup nesneye değer olarak da atayabiliriz. Yukarıdaki metodu harici bir fonksiyon ile de dönüştürebiliriz. (Çok kullanışlı olmasa da).
function kendiniTanit (obj) {
return `Ben ${obj.isim}, numaram ${obj.no}, sinifim ${obj.sinif}`;
}
let ogrenci = {
no:2301,
isim:'Asya',
sinif:7,
kendiniTanit:kendiniTanit(this)
}
};
alert( ogrenci.kendiniTanit() );
Boş nesneleri fonksiyon olarak "anahtar:değer" ikilileri ile değer döndürerek oluşturmak daha kullanışlıdır. Bu da ES6 ile gelen bir yeniliktir. Örnek.
function isciOlustur (isim,gorev,maas) {
return {
isim, //isim:isim yazmaya gerek yok
gorev, //gorev:gorevyazmaya gerek yok
maas //maas:maas yazmaya gerek yok
};
}
let birIsci = isciOlustur('Ahmet','Usta','10.000')
alert( birIsci.isim );
alert( birIsci.maas);
Bunu yapabilmemizi sağlayan olay JavaScript dilinde fonksiyonların bir nesne olarak tasarlanmış olmasıdır.
this
deyimi sadece nesneleri referans etmez. Referans ettiği öğe, yürütülme esnasında .
işaretinden önce olması gereken öğedir. this
deyiminin sadece nesne ile sınırlı olmadığını bilmeniz gerekir. Şu örneklere bakınız.
//Sıkı mod
"use strict";
function isci() {
return this;
}
alert( isci() ); // undefined
// Normal mod
function isci() {
return this;
}
alert( isci() ); //[object Window] Pencere nesnesi
// Sıkı mod
"use strict";
let x = this;
alert(x); //[object Window]
alert(x.length) // 0 'Pencere nesnesinin uzunluğu'
alert(x.location) // bir adres 'Pencere nesnesinin adresi'
this
deyimi, koşullu operatör veya ok fonksiyonlarıyla kullanılırsa this
kaybolur, nesneyi referans edemez. Örnek.
//Koşullu operatörlerde
let nesne = {
isim : 'Kaya',
sifre : '1234',
izinsiz: 'İzniniz yok!',
sifreGoster: this.isim,
sifreGizle: this.izinsiz,
};
alert( nesne.isim == 'Kaya' ? nesne.sifreGoster : nesne.sifreGizle); //undefined
//Ok Fonksiyonlarda
let nesne = {
isim : 'Kaya',
izinsiz: 'İzniniz yok!',
kendiniTanit: let tanit = () => this.isim,
kendiniGizle: let gizle = () => this.izinsiz,
};
alert( nesne.kendiniTanit() ); //undefined
this
dile ait bir deyimdir (for
, if
... gibi) referans ettiği öğeyi biz kontrol edemeyiz.
Last updated