Yeni anahtar kelime

new ile bir işlev çağrıldığında, çağrılan işlevi şu şekilde kullanarak yeni bir nesne oluşturulur: "kurucu" açıklamanız gerekir:

function MyFunction() {}
const myObject = new MyFunction();

typeof myObject;
> "object"`

Bu, bir "oluşturucu fonksiyon"un bir şablon görevi görür. aynı yapısal kalıbı izleyen nesnelerden yararlanın:

function MyFunction() {
  this.myProperty = true;
}
const myObject = new MyFunction();

myObject.myProperty;
> true

Oluşturucu içindeki this değeri işlevi, oluşturulan nesneyi ifade eder ve nesnenin doldurulmasını sağlar özellikleri ve yöntemleri içerir. Bu şekilde veri değerlerini ve işlem yapmak için gereken yöntemleri içeren nesnelerin oluşturulması "kapsülasyon" adlı bir kavram, söz konusu verileri tek bir taşınabilir birim olarak

function MyFunction( myArgument ) {
    this.myValue = myArgument;
    this.doubleMyValue = () => myArgument * 2;
}
const myObject = new MyFunction( 10 );

myObject.myValue;
> 10

myObject.doubleMyValue();
> 20

this mevcut yürütmeyi belirtir fonksiyonun bağlamıdır; yani yapıcı fonksiyonun aynı kurallarını diğer herhangi bir işlev olarak this değerine ayarlayın. Örneğin, bir kurucu olarak tasarlanan bir işlev, bağımsız olarak çağrıldığında this değeri için evrensel bağlama kullanır:

function MyFunction() {
    console.log( this  );
}
const myObject = new MyFunction();
> MyFunction { }

MyFunction(); // Global `this` binding outside of strict mode is `globalThis`
> Window {  }

(function() {
    "use strict";
    function MyFunction() {
            console.log( this );
    }
    MyFunction();  // Global `this` binding inside of strict mode is `undefined`
}());
> undefined

Yapıcı fonksiyonun ilk karakteri, ilk harfini büyük yapmak tarafından oluşturulan adlandırma kalıbını izleyerek JavaScript'in yerleşik fabrika işlevleri. Bu terimlerin bazen birbirlerinin yerine kullanıldığını görebilirsiniz oluşturucu fonksiyonları (yeni oluşturulmuş bir yapıda çalışması amaçlanan fonksiyonlar) new anahtar kelimesiyle çağrıldığında nesne ("fabrika]'dan farklıdır) fonksiyonları," Bu, açıkça return nesne:

function myFunction( myArgument = false ) {
  return { "myProperty" : myArgument };
}
const myObject = myFunction( true );

myObject;
> Object { myProperty: true }

Temel ilkeler aynı olsa da özelleştirilebilir kurucu fonksiyonlarına tam özellikli ES6'da kullanıma sunulan Sınıf söz dizimi.