JavaScript Notları IV-Objeler
Bu yazımızda JavaScript’in obje bazlı yaklaşımlarına ve kullanışlı olan bazı tasarım özelliklerine bakıyoruz:
Objeler
65 — Obje (nesne) nedir?
Objeler; belirli özellik ve metotlardan oluşan derlemelerdir.
Js’teki objeler de diğerleri gibi değişkendirler. Bir objenin birçok veri tipinde (String, Number, Boolean vb.) özellikleri olabilir.
Objenin özellikleri; primitif değerler ya da diğer obje ve fonksiyonlardan oluşabilmektedir.
Ör:
var book = { name : “Javascript Book”, author: “Ümit Eroğlu”, pages: 100}
66 — Obje oluşturmanın yolları nelerdir?
Js’te aşağıda olduğu gibi obje oluşturabiliriz:
Literal (tam anlamında-harfi harfine) kullanarak:
Object literal ile parantezler içinde {} isim ve değer ikilileri kullanarak objeler oluşturabiliriz.
Ör:
var book = { name : “Javascript Book”, author: “Ümit Eroğlu”, pages: 100}
Yeni anahtar kelimesini (new) kullanarak, dahili olan obje constructor fonksiyonları ile :
Yeni anahtar kelimesini kullanarak obje oluşturabilir ve özelliklerini aşağıdaki gibi ayarlayabiliriz:
Ör:
var book= new Object();
person.name= “John”;
person.author= “Wayne”;
person.pages= 50;
Yeni anahtar kelimesi ve kullanıcı tarafından belirlenen dahili constructor fonksiyonu ile obje oluşturma:
Öncelikle bir constructor fonksiyonu oluştururuz sonra yeni anahtar kelimelerle objeler elde ederiz:
Ör:
function Book(name, author, pages) {this.name = name;this.author = author;this.pages = pages;}
ve aşağıdaki gibi kitap (book) objesini elde ederiz:
var book = new Book(“Javascript Book”, ”Ümit Eroğlu”, 100);
Using Object.create() kulanarak:
Object.create() metodu, var olan bir objeyi prototip gibi kullanarak yeni bir obje yaratır.
Ör:
const person = { isHuman: false, printIntroduction: function () { console.log(`Am I human? ${this.isHuman}`); } }; const me = Object.create(person);
67 — Dahili olan (built-in) ya da nativ olan objeler hangileridir?
Js bize; Number, Boolean, String, Array, Date, Math, RegExp gibi mevcut olan bazı objeler sağlar.
68 — “this” anahtar kelimesi nedir?
“this” anahtar kelimesi, ait olduğu obje ile ilgilidir. Bir obje metodunda ise objenin ait olduğu metod ile alakalıdır.
Tek başına kullanıldığında, asıl sahip (owner) Global objedir. Dolayısıyla bu global obje ile ilgilidir.
Bir fonksiyonda dahi global objeyi işaret eder. Strict mode’ta bir fonksiyon içerisinde kullanıldığından “undefined” olur. HTML event handler’da ise html içindeki event’i alan elemana işaret eder.
69 — “String objesi” nedir?
String objesi bir karakter dizilimidir. String objesi, metotlar için gereken bazı operasyonların gerçekleşmesini sağlar.
Bu metotlar; charAt(), charCodeAt(), concat(), indexOf(), match(), slice(), split(), substr(), toLowerCase(), toUpperCase(), valueOf(), toString() gibi önemli bazı fonksiyonlardır.
70 — Sayı/Rakam (Number object) objesi nedir?
Sayı, (Number) Js’te numerik değerler ile çalışmamızı sağlayan kapsayıcı (wrapper object) bir objedir.
Sayı objesi aşağıdaki gibi oluşturulur:
var numberVar = new Number([value]);
Bize; isNaN(), isFinite(), isInteger(), isSafeInteger(), parseInt(), parseFloat() gibi sayılar ile çalışabileceğimiz bazı metotlar sağlar
71 — “Boolean objesi” nedir?
Boolean objesi, boolean bir değeri kapsar. (true-false gibi).
Boolean objesi aşağıdaki gibi oluşturulur:
var booleanVar = new Boolean([value]).
Eğer değer; 0,-0, null, false, NaN(Not a Number), undefined ya da boş bir string ise (“”) objenin değeri “false” olur. Tüm diğer değerler, “true” değerinde bir obje oluşturur. Hatta ‘false’ adında bir string dahi “true” değerinde bir obje oluşturur.
72 — “Array objesi” nedir?
Array, global bir objedir. Array oluşturmak amacıyla farklı elemanları saklamak için kullanılır.
Array objesi aşağıdaki gibi oluşturulur:
new Array(ele0, ele1[, …[, eleN]])new Array(arrayLength)
73 — “Date (Tarih) Objesi” nedir?
Js Date objesi zamanda tek bir anı temsil eder. Date objesi, 1 Ocak 1970‘ten beri (milisaniyelerden oluşan bir integer) unix tarih bilgisi (timestamp) değeri kullanır.
Date objesi aşağıdaki gibi oluşturulur:
new Date();new Date(value);new Date(dateString);new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
74 — “Math objesi” nedir?
Math, matematiksel sabitler ve fonksiyonların kullanılabildiği dahili bir objedir. Math, diğer global objelerde olduğu gibi bir constructor’a gerek duymaz. Tüm metod ve özellikleri statiktir.
Matematiksel operasyonlar için; sin(x), cos(x), tan(x), exp(x), floor(x), max([x[, y[, …]]]), min([x[, y[, …]]]), pow(x, y), random(), round(x), trunc(x) gibi metodlar sağlar.
75 — “RegExp Objesi” nedir?
RegExp constructor’ı, bir yazıyı (text) bir desen (pattern) ile karşılaştırmak üzere, düzenli ifade (regular expression) objesi oluşturmak için kullanılır.
RegExp objesi aşağıdaki gibi oluşturulur:
new RegExp(pattern[, flags])
76 — ”Namespace” nedir?
Js’te namespace (ad boşluğu-ad alanı) tüm fonksiyonları, metotları ve değişkenleri içeren tek bir global objedir.
Js, default (varsayılan) olarak namespace sağlamaz, sizin oluşturmanız gerekir. Bu nedenle Js’teki tüm fonksiyonlar, değişkenler ve objeler default olarak global’dir.
77 — Nasıl “namespace” oluşturabiliriz?
var myProjectNameSpace = { projectfunctionone: function() {},projectfunctiontwo: function() {}}...myProjectNameSpace. Projectfunctionone();
78 — Js’te “prototype” nedir?
Js’te özelliği bulunan tüm objeler bir prototip olarak adlandırılır. Prototip, varsayılan olarak constructor özellikleri bulunan bir objedir.
Prototip objesi, varsayılan şekilde her fonksiyon ve obje ile ilişkilidir. Bu durum, fonksiyonun prototip özelliği, erişilebilir, (accessible) değiştirilebilir (modifiable) ve obje prototipinin görünür olmadığı (not visible) durumlar için geçerlidir.
Prototip, herhangi bir objeye özellik ve ya metod eklememize olanak sağlar.
Ör:
somecustomcreationobject.prototype.age=35;
79 — “Prototypal inheritance” nedir?
Eğer bir objenin property’sini okumak istiyorsanız ve property orada mevcut değilse, Js onu otomatik olarak prototipten alır. Bu duruma “prototypal inheritance” denir.
80 — ”call()” ve “apply()” arasındaki fark nedir?
Function.prototype.call() metodu, “this” değeri ile argümanları birbirinden ayrı olacak şekilde bir fonksiyonu çağırır.
call() metodunu kullanırken, fonksiyonun argümanlarının bilinmesi önemlidir.
Function.prototype.apply() metodu ise bir fonksiyon çağırırken argümanları array olarak kullanır. (ya da array benzeri bir obje olarak)
apply() metodunu kullanırken, öncekinde olduğu gibi yine fonksiyonun argümanlarının bilinmesi önemlidir.
81 — “Promise” nedir?
Promise objesi, olası bir tamamlanmayı (eventual completion) ya da bir başarısızlığı (failure) temsil eder. Bu durum, eş zamanlı olmayan (asynchronous) bir operasyonu ve o değerin sonucunu içerir.
Promise, bir değer için oluşturulan temsili bir vekil gibidir. (proxy) Bu durum, promise oluşturulurken bilinebilir ve ya bilinmeyebilir.
Promise, eş zamanlı olmayan bazı operasyonların başarıya ulaşmasını ve ya başarısızlığını belirlemek açısından (başarı değeri ve ya başarısızlık nedeni vb gibi) ve bu durumları handler’lar ile ilişkilendirmemiz için oldukça faydalıdır.
Bu durum, eş zamanlı (asynchronous) olmayan metotların, değerleri eş zamanlı (synchronous) metotlarda olduğu gibi geri dönmesine olanak sağlar. En son değeri hemen dönmek yerine bir promise kullanarak, gelecekteki bir zamanda değerin sağlanacağını belirtmiş olur.
Devamı gelecek…
Kaynaklar: