JavaScript ES6 Nedir?

JavaScript ES6 Nedir?

JavaScript ES6, JavaScript dilinin 6 sürümüdür ve birçok kullanışlı özellik sunar Arrow function, let ve const değişkenleri, template literals ve daha fazlası hakkında bilgi edinin ES6 nedir? Buradan öğrenin!

JavaScript ES6 Nedir?

JavaScript ES6, ECMAScript 2015 veya kısaca ES6, web geliştiricilerinin en çok kullandığı JavaScript dilinin 6. sürümüdür. Önceki versiyonlara göre birçok yenilik ve geliştirme sunan ES6, kod yazma ve geliştirme süreçlerinde büyük kolaylıklar sağlamaktadır.

ES6, JavaScript diline yeni özellikler katmıştır. Bu özellikler değişken ve sabit tanımlama, fonksiyon kullanımı, class kullanımı, obje literalleri ve daha birçok sınırlama ve kısıtlamayı ortadan kaldırmıştır. Kod yazarken daha esnek ve dinamik bir yapının kullanılması, hem okunabilirliği hem de geliştirme hızını artırmaktadır.

ES6, modern ve çağdaş web uygulamalarının ihtiyacı olan yapısal ve fonksiyonel özellikleri içermektedir. Bu özellikler sayesinde web uygulamaları daha güvenli, hızlı, okunabilir ve sürdürülebilir hale gelmektedir. Kısacası, ES6 sayesinde JavaScript dilinde kod yazma süresi kısalmış ve daha yenilikçi uygulamalar geliştirilmesine yardımcı olmuştur.


ES6 veya ECMAScript2015 Nedir?

ES6 veya ECMAScript2015, JavaScript'in en son sürümüdür ve içerisinde birçok yeni özellik barındırmaktadır. ES6, ECMAScript Technical Committee 39 tarafından hazırlanmıştır ve tüm modern tarayıcılar tarafından desteklenmektedir.

Bu sürüm, JavaScript diline yeni özellikler eklemekte ve dilin anlaşılabilirliğini artırmaktadır. Bunun yanı sıra okunabilirliği kolaylaştıran ve yazılım geliştiricilerin hayatını kolaylaştıran pratik özellikleri de vardır. Bunların arasında block scoping, arrow fonksiyonlar, template stringler, let ve const değişkenleri gibi pek çok özellik sayılabilir.

ES6, önceki sürümlerdeki JavaScript ile uyumludur, bu nedenle var olan kodlarda herhangi bir değişiklik yapılması gerekmeksizin kullanılabilir. Ayrıca ES6 kodları birden fazla farklı tarayıcıda çalışabilir. Ancak bazı özellikler bazı tarayıcılarda desteklenmemektedir. Bu durumda, özellikleri kullanmak için transpilerler veya polifiller kullanabilirsiniz.

  • ES6'nın içerdiği yeni özelliklerden bazıları şunlardır:
  • Let ve Const Değişkenleri: ES6 ile birlikte, var değişkeni yerine block-scoped let ve const değişkenleri tanıtıldı
  • Arrow Fonksiyonlar: Arrow fonksiyonlar, daha kısa yazım sağlar ve hatta this değişkenini otomatik olarak tanımlar
  • Template Stringler: Template stringler, string birleştirme işlemini kolaylaştırır
  • Destructuring Atama: Destructuring atama, nesneleri veya dizileri değişkenlere atama işlemini kolaylaştırır
  • Classlar: ES6, sınıfların tanımlanmasını ve kalıtım yapısını kolaylaştırır
  • Modülerlik: ES6 modülerliği destekler ve bu sayede daha yönetilebilir kod yazmayı sağlar

ES6, JavaScript'in işlevselliğini artıran ve yazılım geliştiricilerin hayatını kolaylaştıran bir sürümdür. Bu nedenle, yeni özellikleri öğrenmek ve kullanmak özellikle önemlidir. Ayrıca ES6, günümüzün modern tarayıcılarında desteklendiği için, web uygulamaları geliştirmek için de çok önemlidir.


Değişkenler ve Sabitler

JavaScript ES6, değişkenlerin ve sabitlerin tanımlanması ve kullanımı konusunda da bazı yenilikler getirdi. Değişkenler, belirtilen değere göre değer alabilen, yani saklanan değerlerin değiştirilebilir olduğu bir veri tipidir. Sabitler ise, bir değer atanarak sabit bir değerde kalması gereken veri tipleridir. ES6 ile birlikte değişkenlerde var yerine let ve const kullanılmaya başlandı. Let değişkenleri, belirtilen blok kapsamında tanımlandığından, aynı adla bir değişken başka bir blokta tekrar tanımlandığında hata verir. Örneğin,

let x = 10;if (true) {  let x = 20; // Bu, blok kapsamında geçerlidir  console.log(x);  // 20}console.log(x);  // 10

Const değişkenleri ise, değerleri atanırken sabit bir değer aldığından, bir kez atanarak sabit kalır. Bu da yapılan hataları en aza indirir ve güvenliği arttırır. Örneğin,

const pi = 3.14;pi = 4; // Sabit değiştirilemez olduğundan hata verir

Değişkenlerin ve sabitlerin yanı sıra, ES6 ile birlikte değiştirilemez sabitler oluşturulabilir. Bunun için Object.freeze() metodu kullanılır. Bu metod, bir nesnenin içine gömülü tüm nesneleri dondurur. Donmuş nesneler, değiştirilemez hale gelir. Aşağıdaki örnekte, bir değiştirilemez sabit kullanımı gösterilmektedir.

const language = Object.freeze({name: 'JavaScript', id: 1});console.log(language.name); // JavaScriptlanguage.name = 'TypeScript'; // Değiştirilemez sabit olduğundan hata verirconsole.log(language.name); // JavaScript

JavaScript ES6'nın getirdiği yeniliklerden bir diğeri ise destructuring assignment'tir. Bu özellik, nesnelerden ve dizilerden gelen değerleri ayıklamak için kullanılır. Aşağıdaki örnekte, destructuring atama kullanımı gösterilmektedir.

const user = {name: 'John', surname: 'Doe', age: 30};const {name, age} = user; // user nesnesinden sadece name ve age özellikleri çekilirconsole.log(name); // Johnconsole.log(age); // 30

Bu yeniliklerle birlikte, değişkenlerin ve sabitlerin kullanımı daha kolay ve güvenli hale gelmiştir. Bu sayede, JavaScript programlama dili daha da etkili hale gelmiştir.

Let ve Const Değişkenleri

ES6 ile birlikte JavaScript dilinde yeni değişken tanımlama yöntemleri olan let ve const kullanılmaya başlandı. Bu yeni değişken tanımlama yöntemleri var olan var anahtar kelimesinin yerini almadı, sadece alternatif yollar olarak sunuldu.

let anahtar kelimesi, var anahtar kelimesinden farklı olarak blok kapsamı oluşturur. Yani herhangi bir blok içinde kullanıldığında sadece o bloğun içinde tanımlanmış olur. Örnek olarak aşağıdaki kod bloğunu ele alalım:

Kod Bloğu Çıktı
      let a = "Merhaba";      if (true) {        let a = "Dünya";        console.log(a);      }      console.log(a);      
      Dünya      Merhaba      

Görüldüğü gibi, a değişkeni if bloğunun içinde başka bir değer aldı ancak diğer kısımda tanımlanan a değişkeninin hala eski değeri "Merhaba" olarak kaldı.

const anahtar kelimesi ise let anahtar kelimesiyle benzerlik gösterir, ancak değiştirilemez sabitler tanımlamak için kullanılır. Değer atandığı andan sonra değiştirilemez, yani tekrar bir değer ataması yapılamaz. Örnek olarak:

Kod Bloğu Çıktı
      const PI = 3.14;      PI = 6.28;      console.log(PI);      
Hata: Assignment to constant variable

Eğer const anahtar kelimesiyle bir değişken tanımlanacaksa, ilk değer verilmesi zorunludur. Aksi halde hata alınacaktır.

let ve const anahtar kelimeleri ile eski yöntemlere nazaran kodların daha okunaklı, hataların daha kolay tespit edilebilir hale geldiği düşünülebilir.


Block Scoping

Block Scoping, yani Blok Kapsamı, ES6'nın önemli özelliklerinden biridir. Bu özellik, önceki JavaScript sürümlerinde olan fonksiyon kapsamının yerine blok kapsamı getiriyor. Bu sayede, değişkenlerin sadece tanımlandığı blokta geçerli olması sağlanıyor.

Örneğin, aşağıdaki örnekte bir if bloğu içinde bir değişken tanımlanıyor:

```javascriptif (true) { let message = "Merhaba"; console.log(message); // "Merhaba"}console.log(message); // Hata: message tanımsızdır```

Burada `let` anahtar kelimesi kullanılarak `message` değişkeni tanımlanıyor. Ancak, bu değişkenin kapsam alanı sadece if bloğuyla sınırlıdır. Dolayısıyla, `message` değişkenine erişmek için if bloğu içinde olmak gerekiyor. Eğer if bloğu dışında `message` değişkenine erişmeye çalışırsak, "message tanımsızdır" hatası alırız.

Bu özelliği kullanarak, kodumuzun okunaklığını ve performansını artırabiliriz. Özellikle, büyük kod bloklarında değişkenleri tam olarak kontrol etmek için blok kapsamını kullanmak oldukça faydalıdır.

Bu özellikle birlikte, `let` ve `const` değişkenlerinin kullanımı daha da önem kazanıyor. `let` değişkenleri, tanımlandığı blokta geçerlidir ve bir kez tanımlandıktan sonra değiştirilebilir. `const` değişkenleri ise tanımlandığı blokta geçerlidir ve bir kez tanımlandıktan sonra değiştirilemez.

Özetle, Block Scoping özelliği sayesinde kodumuzun kapsam alanı daha belirgin hale gelir ve değişkenlerin kullanımı daha doğru ve hızlı bir şekilde gerçekleştirilir.


Değiştirilemez Sabitler

Değiştirilemez sabitler, ES6 ile birlikte gelen yeni bir özellik olarak karşımıza çıkıyor. Bu özellik sayesinde, bir kez atanan ve değeri değişmeyen sabitler tanımlayabiliyoruz. Yani, kullandığımız değişkenin değeri programı çalıştırdığımız süre boyunca sabit kalacaktır.

Bu özelliği kullanarak, kodumuzdaki sabit değerlerin güncellenmesini önleyebilir ve kodumuzun daha güvenli hale gelmesini sağlayabiliriz. Örneğin, pi sayısı gibi sabit bir değer için değiştirilemez sabitleri kullanabiliriz.

Değiştirilemez sabitler, const anahtar kelimesi ile tanımlanır. Örneğin:

```const pi = 3.14;```

Yukarıdaki örnekte "pi" değiştirilemez bir sabit olarak tanımlanmıştır ve değeri 3.14'tür. Bu değer, programın çalışması boyunca değiştirilemeyecek ve sabit kalacaktır.

Ayrıca, değiştirilemez sabitlerle bir dizi nesne de tanımlayabiliriz. Örneğin:

```const kullanici = {isim: "Ahmet", yas: 28};

kullanici.isim = "Mehmet"; // Hata vermez

console.log(kullanici); // {isim: "Mehmet", yas: 28}```

Yukarıdaki örnekte, "kullanici" nesnesi değiştirilemez bir sabit olarak tanımlanmıştır. Ancak, nesnenin özelliklerine erişebilir ve onları değiştirebiliriz. Bu nedenle, değiştirilemez sabitlerin kullanımı, nesnenin değişmezliğini garanti etmiyor.

Sonuç olarak, değiştirilemez sabitler kodumuzu daha güvenli hale getiren önemli bir özelliktir. Bu özelliği kullanarak, kodumuzdaki sabit değerlerin güncellenmesini önleyebilir ve daha sade ve anlaşılır bir kod yazabiliriz.


Destructuring Atama

Destructuring Atama, JavaScript ES6 ile gelen kısa bir yazım biçimidir. Bu yazım biçimi, küçük veri yapılarının öğelerini önceden tanımlanmış değişkenlere çok hızlı bir şekilde atamak için kullanılır. Destructuring Atama özelliği, özellikle büyük nesneler veya veri yapılarıyla çalışırken oldukça kullanışlıdır.

Bunun bir örneği, bir dizi içindeki öğeleri farklı değişkenlere atamaktır. Önceden, bu dizi öğeleri tek tek extralyenerek atanmalıydı, ancak Destructuring Atama kullanarak, her öğe tek seferde farklı bir değişkene atananabilir. Aşağıda bir örnek verilmiştir:

Örneğin Kodu Örneğin Çıktısı
        var arr = [1, 2, 3, 4];        var [a, b, c, d] = arr;        console.log(a); // 1        console.log(b); // 2        console.log(c); // 3        console.log(d); // 4      
        1        2        3        4      

Bu örnekte, bir dizi tanımlanır. Sonra her bir öğenin açıklamalı şekilde atanacağı farklı değişkenler tanımlanır. Son olarak, her öğe tek bir satırda farklı bir değişkene atanır.

Bu özellik, nesne yapısı gibi karmaşık veri yapılarıyla da çalışır. Öğelerin isimleri aynıysa, nesnenin anahtarları kullanılarak değişkenlere atamak da mümkündür. Aşağıdaki örnekte, bir nesnenin öğeleri farklı değişkenlere atandığı görülmektedir:

Örneğin Kodu Örneğin Çıktısı
        var obj = {a: 1, b: 2, c: 3};        var {a:x, b:y, c:z} = obj;        console.log(x); // 1        console.log(y); // 2        console.log(z); // 3      
        1        2        3      

Bu örnekte, bir nesne tanımlanır ve her bir anahtar farklı bir değişkene atanır. Destructuring Atama özelliği, kodun okunabilirliğini de artırır ve daha az kod yazmayı sağlar. Aynı zamanda, büyük nesneler veya veri yapılarıyla çalışırken daha az hata yapmanızı sağlar.


Fonksiyonlar

ES6 ile birlikte fonksiyonlar büyük bir güncelleme aldı. Artık daha okunaklı ve daha pratik kodlar yazmak mümkün. Bu noktada, Rest Parameters ve Spread Operatörü'nün kullanımı ile fonksiyon parametrelerinin daha okunaklı hale getirilmesi sağlandı. Bu özellik sayesinde fonksiyonlar çok daha esnek hale geldi.

Bunun yanı sıra, Arrow fonksiyonları yazmak artık çok daha kolaylaştı. Fonksiyonların parametrelerini ve geri dönüş değerlerini kısa bir şekilde belirleyebiliyoruz. Aynı zamanda, bu fonksiyonlar anonim fonksiyonları çağırmak yerine kullanılabiliyor.

ES6 ile birlikte gelen diğer bir önemli özellik ise Classlar. Bu özellik sayesinde, prototip tabanlı kalıtım daha da kolay hale geldi. Ayrıca, Class'ların statik metodları da hem okunaklılık açısından hem de işlevsellik açısından büyük avantaj sağlıyor.

Sonuç olarak, ES6 ile birlikte fonksiyonlar önemli bir güncelleme almış durumda. Rest Parameters ve Spread Operatörü kullanımı, Arrow fonksiyonları ve Classlar gibi özellikler sayesinde kod yazmak hem daha kolay hem de daha pratik hale geldi. Bu yenilikleri kullanarak, kodlarımızı daha okunaklı ve daha anlaşılır hale getirebiliriz.


Okunabilirlik İçin Fonksiyon Parametreleri

Fonksiyonların, belirli veri türlerini parametre olarak alması yaygındır. Bu durumda, fonksiyonun okunurluğunu sağlamak için Rest Parameters ve Spread Operatörü kullanabiliriz.

Rest Parameters: Fonksiyona değişken sayıda parametre geçirmek için kullanılabilirler. Kolayca ayarlanabilecekleri için kodun okunabilirliğini arttırırlar. Örneğin:

Kod Açıklama
function myFunction(...myArgs) Fonksiyona argümanları myArgs adında bir dizi içinde geçirir

Spread Operatörü fonksiyon parametrelerini ayrıştırmak veya doğrudan bir diziyi fonksiyona geçirmek için kullanılır. Örneğin:

Kod Açıklama
let myArray = [1, 2, 3];
function myFunction(a, b, c) {
 console.log(a, b, c);
}
myFunction(...myArray);
Spread operatörü kullanarak myArray dizisini fonksiyona geçirir

Rest Parameters ve Spread Operatörü, fonksiyonlarda kullanıldığında, kodun okunabilirliğini artırarak doğru parametre kullanımını sağlar. Bu özellikleri kullanarak, kodu daha bakımı kolay ve anlaşılır hale getirebiliriz.


Arrow Fonksiyonlar

Arrow fonksiyonları birçok JavaScript geliştiricisi için oldukça önemli bir yenilik olarak tanımlanır. ES6 ile birlikte gelen bu özellik, hem kod karmaşıklığını azaltır hem de yazılan kodların okunaklılığını artırır. Arrow fonksiyonları, belirli bir işlem veya hesaplama yapmak için kullanılan bir fonksiyon türüdür.

Arrow fonksiyonları, standart fonksiyonlara göre oldukça basittir. Fonksiyon adının ardından, ok işareti (=>) ve birinci satırda kullanılacak işlem girilir. Arrow fonksiyonları, ayrıca, dışarıdan bir argüman alırlarsa parantezler içinde yazılır. Örneğin, ```(arg1, arg2) => {return arg1 + arg2}``` şeklinde bir kod kullanılabilir.

Arrow fonksiyonları, özellikle bir dizi işlem yapılması gereken kodlarda oldukça kullanışlıdır. Bir dizi oluşturmanın ardından, her bir elemanın üzerinde işlem yapmak istendiğinde arrow fonksiyonları kullanılabilir. Ayrıca, veri almak için kullanılan AJAX fonksiyonlarına benzer şekilde yazılan kodlar, arrow fonksiyonları ile daha kısa ve okunaklı hale gelebilir.

Aşağıdaki örnek arrow fonksiyonu, bir dizinin elemanlarını içinde bulundukları sıra numarasıyla birlikte listelemek için kullanılabilir.

```let dizi = [1, 2, 3, 4, 5];dizi.forEach((eleman, index) => { console.log(`${index + 1}. eleman: ${eleman}`);});```

Bu örnekte, forEach() fonksiyonu, dizi elemanları üzerinde işlem yapmak için kullanılır. Arrow fonksiyonu, forEach() fonksiyonuna argüman olarak verilir ve her bir elemanın index değeriyle birlikte listelenmesini sağlar. Arrow fonksiyonlarının kullanımıyla, kodlar daha kısa, okunaklı ve anlaşılır hale gelir.


Classlar

ES6 ile birlikte JavaScript'e sınıf yapısı da katılmıştır. Bu sınıflar, nesne tabanlı programlama yapısına uygun şekilde kullanılabilirler. Sınıfların kullanımı, nesne oluşturma işlemini kolaylaştırırken, kodun okunabilirliğini arttırmaktadır.

Sınıflar, birçok nesnenin birbirinin aynısı olduğu durumlarda kullanışlıdır. Örneğin, bir e-ticaret sitesinde müşteriler için oluşturacağınız hesap nesnesi, iletişim nesnesi, sipariş nesnesi gibi birçok nesne sınıf yapısıyla oluşturulabilir.

Sınıflar için temel şablonu oluşturmak için "class" anahtar kelimesi kullanılır. Sınıf tanımlandıktan sonra, "constructor" metoduyla sınıfın özellikleri belirtilir. Bu metodun içinde yer alan "this" anahtar kelimesi, sınıfın kendi özelliklerine referans verir.

```html```

Yukarıdaki örnekte, Araba sınıfı oluşturuldu ve bu sınıfın marka, model ve yıl özellikleri belirlendi. Daha sonra, "new" anahtar kelimesiyle bir Araba nesnesi oluşturuldu ve bu nesnenin özellikleri yazdırıldı.

Sınıflar, nesne tabanlı programlama yapısının yanı sıra prototip tabanlı kalıtım yapısını da destekler. Bu sayede sınıfın özellikleri ve metotları, kalıtım ile başka sınıflara aktarılabilir. Böylece, kod tekrarından kaçınılır ve tekrar kullanılabilirlik artar.

```html```

Yukarıdaki örnekte, Araba sınıfı, MotorluArac sınıfından kalıtım almaktadır. Böylece Araba sınıfı, MotorluArac sınıfının Özelliklerini ve metotlarını da kullanabilmektedir. Araba sınıfının özellikleri, MotorluArac sınıfının "constructor" metoduna super anahtar kelimesiyle referans verilerek belirlenmiştir.

Sonuç olarak, ES6 ile birlikte JavaScript'e eklenen sınıf yapısı, nesne tabanlı programlama yapısını destekleyerek kodun okunabilirliğini ve tekrar kullanılabilirliğini arttırmaktadır. Sınıfların kalıtım özelliği sayesinde, tekrarlayan kodların tekrarı engellenerek kod tasarrufu sağlanabilir.


Prototip Tabanlı Kalıtım

Prototip Tabanlı Kalıtım, bir nesnenin özelliklerini başka bir nesne ile paylaşarak kodun tekrarını önlemek için kullanılan bir programlama tekniğidir. ES5 sürümüne kadar, JavaScript'te nesne tabanlı programlama, prototip tabanlı kalıtım kullanılarak gerçekleştirilirdi. Ancak, ES6 sürümüne geçişle birlikte, prototip tabanlı kalıtımın yerini Class'lar almıştır. Class'lar, prototip tabanlı kalıtımdan farklı olarak daha okunaklı bir yapı sunar. Ayrıca, Class'lar da prototip tabanlı kalıtımdan gelen özellikleri kullanabilir. Örneğin, bir sınıf, başka bir sınıftan özelliklerini miras alarak kendi özelliklerini bünyesinde toplayabilir. Aşağıdaki örneklerde bir Sürücü sınıfı, bir Kamyon ve Otobüs sınıfından özelliklerini miras alır:```html

class Arac { constructor(marka, model, yakit) { this.marka = marka; this.model = model; this.yakit = yakit; }}class Kamyon extends Arac { constructor(marka, model, yakit, cap) { super(marka, model, yakit); this.cap = cap; }}class Otobus extends Arac { constructor(marka, model, yakit, yolcuSayisi) { super(marka, model, yakit); this.yolcuSayisi = yolcuSayisi; }}class Surucu { constructor(isim, yas, ehliyet) { this.isim = isim; this.yas = yas; this.ehliyet = ehliyet; } aracSur(arac) { console.log(`${this.isim} ${arac.marka} ${arac.model} aracını kullanıyor.`); }}let kamyon = new Kamyon("Volvo", "VNL 300", "Dizel", "30 ton");let otobus = new Otobus("Mercedes-Benz", "Travego", "Benzin", 50);let surucu = new Surucu("Ahmet", 35, "D");surucu.aracSur(kamyon);surucu.aracSur(otobus);

```Yukarıdaki örneklerde, Kamyon ve Otobus sınıfları, Arac sınıfından özellikleri miras alır. Bu özellikleri kullanarak kendi özelliklerini eklerler. Surucu sınıfı ise, aracSur() metodunda aldığı arac parametresinin marka ve model özelliklerini kullanarak araç kullanımını console'da gösterir. Sonuç olarak, prototip tabanlı kalıtım, ES5 sürümünde JavaScript nesne tabanlı programlamada kullanılıyordu. Ancak, ES6 sürümüyle birlikte Class'lar kullanıma girdi. Class'lar, prototip tabanlı kalıtımdan daha okunaklı bir yapı sunar ve prototip tabanlı kalıtımdan gelen özellikleri kullanabilir. Bu sayede, JavaScript nesne tabanlı programlamada daha etkili bir yaklaşım sunar.

Statik Metodlar

Statik metodlar, bir class'a ait olan ancak class'ın örneklenmesi gerekmeden direkt olarak kullanılan metodlardır. Birçok dilde olduğu gibi, ES6 ile birlikte JavaScript de statik metodları desteklemektedir. Bu, özellikle birçok nesne örneği oluşturulduğunda örnekleri yönetmek yerine, sadece class'a işaret ederek işlem yapılmasını sağlayan önemli bir özelliktir.

Statik metodlar, class dışındaki diğer fonksiyonlardan farklı olarak, this anahtar kelimesini kullanamazlar. Bunun yerine, class'ı temsil eden objeye ulaşmak için class'ın ismi kullanılır. Ayrıca, statik metodlar, yalnızca class'lar tarafından çağrılabildiği için, class'ın örneği üzerinden de çağrılamazlar.

Statik metodlar, genellikle yardımcı fonksiyonlar, validasyon fonksiyonları veya utility fonksiyonları gibi durumlarda kullanılır. Örneğin:

```javascriptclass HesapMakinesi { static topla(sayi1, sayi2) { return sayi1 + sayi2; }}

console.log(HesapMakinesi.topla(5, 7)); // 12```

Yukarıdaki örnekte, HesapMakinesi class'ı, bir topla() metodu ile tanımlanmıştır. Bu metod, class'a özgü olduğundan, HesapMakinesi.topla(5, 7) şeklinde doğrudan çağrılabilir.

Statik metodlar, genellikle es6'da kullanılan Class'lar ile birlikte kullanıldığından, eski JavaScript sürümleriyle uyumlu değildir. Ancak, modern tarayıcılar ve Node.js, es6 sürümünü desteklediğinden, herhangi bir sorun yaşamadan kullanılabilirler.

Özetle, statik metodlar, class'ların örneklenmesi gerekmeden doğrudan çağrılabilen metodlardır. Bu özellik, nesne örneklerinin yönetimini kolaylaştırır ve sıklıkla utility fonksiyonları veya validasyon fonksiyonları gibi durumlarda kullanılır. Ancak, eski JavaScript sürümleri ile uyumu olmadığı için, es6 sürümünü destekleyen tarayıcıların ve uygulamaların kullanılması önerilir.