new Yapıcı Operatörü
Bizler şu ana kadar değişkenleri özüne uygun (literal) bir şekilde oluşturduk. Yani:
let str = "Karakter",
sayi = 123;
alert( typeof(str) ); //string
alert( typeof(sayi) ); //numberDeğişkenleri, tipinin özellik ve metotlarına sahip bir 'nesne' olarak oluşturmak da mümkün. Bunu yapıcı bir fonksiyon olan new operatörü ile yaparız. Deneyelim.
let str = new String("new Operatörü"); // yeni bir 'String Nesnesi'
alert(str); // Aynı string gibi ekrana basıldı.
alert( str[1] ); // Aynı string gibi 'e' çıktısı verdi
alert( str.slice(0,3) ); //// Aynı string gibi 'new' çıktısı verdinew operatörü ile oluşturulan tüm numuneler object tipinde olur.
let str = new String("new Operatörü");
alert( typeof(str) ); // string değil 'object'Normalde ilkel tipler doğrudan değeri tutarlar fakat new ile deklare edilen değişkenler aksi yapılmamışsa belleğin heap bölümünde referans (adres) tutarlar.
new operatörüyle oluşturulan numune, örneklendirilen öğenin (string, number, vs.) boş bir modelinden (prototip) oluşturulur. Bu sebeple numuneler, örneklendirilen öğenin referansını tutmaz, heap bölümünde kendine ait bir referansı olur. Yani:
let str = new String("new Operatörü");
let str2 = str // veya 'new String(str);' olarak da deneyebilirsiniz.
alert(str2); // 'new Operatörü' çıktısı
str = 'Yeni değer';
alert(str2); // yine 'new Operatörü' çıktısı alınır.
//str'nin değerinin değişmesinden etkilenmedi. Bağımısz bir kopyaObject.assign() ile bir nesneden yeni bir nesne oluşturmak istediğimizde yaptığımız gibi fakat daha veciz bir şekilde. Örnek.
Bir numune oluşturmak için bu işlemi new operatörü ile yapalım. Fakat öncesinde isci öğesini bir fonksiyon halinde yapılandıralım.
new operatörü ile oluşturulan numunelerde oluşturulduğu öğenin ( string, number, function vb. ) tüm özellik ve metotları bulunur.
Öğelerin bir prototipi (tüm özelliklerine haiz boş hali) vardır. Peki bir öğenin tüm numunelerine sonradan bir özellik eklemek istersek ? Bunun için öğenin prototype'ini kullanacağız. Önceki koddan devam edersek.
Bazı öğeler (sınıf, nesne veya fonksiyon) özüne uygun (literal) bir şekilde oluşturulabileceği gibi new operatörü ile de oluşturulabilir. Bunlar:
new Array()new Object()new String()new Number()new BigInt()new Boolean()new Function()
Fakat bazı öğeleri oluşturmanın doğrudan bir yöntemi (literal) yoktur. Bunları sadece new operatörü ile oluşturabiliriz. Örnek:
new Map()new Set()new Symbol()new Error()
Last updated