Sınıflar

ES6 "sınıflar" kavramını ortaya attı Bu, JavaScript'ten farklı, diğer programlama dillerindeki derslerde de bulabilirsiniz. Bu yöntemde sınıflar halihazırda veri veya özellik içeren nesneler oluşturmak için şablon görevi görür ve bu verilerin işlenmesiyle ilgili yöntemlere yer verir. Bu nesneler, özellikler ve yöntemler toplu olarak "üyeler" olarak adlandırılır. sınıfını kullanır.

Bir sınıfı tanımlamak için class anahtar kelimesini kullanın. En iyi uygulamayı ve ilkesini uygulamakla birlikte, JavaScript'in yerleşik oluşturucu işlevleri tarafından büyük harfle başlayan bir sınıfın tanımlayıcısı:

class MyClass {}

Sınıflar, gelişmiş teknolojilerle çalışmak için daha erişilebilir Prototiplerin ve oluşturucu fonksiyonların özellikleri:

class MyClass {}

typeof MyClass;
> "function"

Sınıflar, gelişmiş JavaScript ile çalışmayı sağlamak amacıyla kısmen eklendiğinden daha kolay ve cazip görünse de, bazen "sentetik şeker". Ancak, yalnızca birkaç öğrenciyle çalışmak için kullanışlı bir kısaltma sunmaktan prototip devralma. Köklü tasarımı ele almak için sınıf söz dizimi oluşturma fırsatlarıyla tanışın JavaScript'teki sorunları gidermeye çalışır. Tek Örneğin, bir sınıfın gövdesindeki tüm kodlar her zaman yüksek düzey modu kullanın.

Bir sınıfın örneğini oluşturmak için new operatörünü kullanın.

class MyClass {}

const myClassInstance = new MyClass();

myClassInstance;
> Object { }

Bir sınıfın gövdesinde tanımlanan işlevler, her biri için yöntem olarak gösterilir örneğidir.

class MyClass {
    classMethod() {
        console.log( "My class method." );
    }
}

const myClassInstance = new MyClass();

myClassInstance.classMethod();
> "My class method."

Bir sınıf içinde tanımlanan yöntem, o sınıfın prototipi üzerinde bir yöntem örnektir. Projenin yapısı prototip zincirine göre bu yöntemleri doğrudan oluşturulan nesne üzerinde uygulayabilirsiniz:

class MyClass {
  classMethod() {
    console.log( "My class method." );
  }
}

const myClassInstance = new MyClass( "A string." );

myClassInstance;
> Object { }
    <prototype>: Object { … }
        classMethod: function classMethod()
        constructor: class MyClass { constructor(myPassedValue) }
        <prototype>: Object { … }

myClassInstance.classMethod();
> "My class method."

Bir sınıfın örneği oluşturmak, şu özelliklere sahip özel bir constructor() yöntemini çağırır: tüm gerekli "kurulumları" ve ilk kullanıma hazırlar. tüm mülkleri içerir. constructor() yöntemi için kullanılabilir:

class MyClass {
  constructor( myPassedValue ) {
    console.log( myPassedValue );
  }
}

const myClassInstance = new MyClass( "A string." );
> "A string."

Bir sınıfın gövdesinde this değeri, örneği ifade eder. this adresinde tanımlanan tüm özellikler, her bir örneğinin özelliği olarak gösterilir o sınıf:

class MyClass {
  constructor( myPassedValue ) {
    this.instanceProperty = myPassedValue;
  }
}

const myClassInstance = new MyClass( "A string." );

myClassInstance;
> Object { instanceProperty: "A string." }

Bu özellikler, sınıfın gövdesindeki tüm yöntemler için de kullanılabilir:

class MyClass {
  constructor( myPassedValue ) {
    this.instanceProp = myPassedValue;
  }
  myMethod() {
    console.log( this.instanceProp );
  }
}

const myClassInstance = new MyClass( "A string." );

myClassInstance.myMethod();
> "A string."

Sınıfınız için bir constructor() tanımlamazsanız JavaScript motoru boş bir "default" olduğunu varsayar constructor. Her sınıfta yalnızca bir özel sınıf olabilir constructor() adlı yöntem:

class MyClass {
  constructor() {}
  constructor() {}
}
> Uncaught SyntaxError: A class may only have one constructor

Bir sınıfı, sınıf bildirimi veya class ifadesi aracılığıyla özelliğini kullanın. Önceki örneklerin tümü sınıf bildirimleriydi. için adların new kullanılarak çağrılması gerekir. Sınıf ifadeleri, "anonim" oluşturmak için adsız bırakıldı sınıfını kullanır.

let ClassExpression = class {
    constructor() {}
};

ClassExpression;
> class  {}

Anonim sınıf ifadelerini, "anında" sınıflar oluşturma:

function classMaker() {
  return class {
    constructor() {}
  };
}

let MyVariable = classMaker();

MyVariable;
> class  {}

Sınıf bildirimi kullanarak bir sınıfı yeniden tanımlamak söz dizimi hatasına neden olur:


class MyClass {
    constructor( ) {
        console.log( "My class." );
    }
};

class MyClass {
    constructor() {
        console.log( "My new class." );
    }
};
> Uncaught SyntaxError: redeclaration of class MyClass

Bununla birlikte, sınıf ifadeleri bir sınıfı yeniden tanımlamanıza olanak tanır:

let ClassExpression = class MyClass { };

ClassExpression = class MyOtherClass {
    constructor( myString ) {
        this.myProp = myString;
    }
};

new ClassExpression( "String." );
> MyOtherClass {myProp: 'String.'}

Sınıflandırma işleminde olduğu gibi, adlandırılmış bir sınıf ifadesini adla çağıramazsınız. beyanı. Ancak, bir sınıf ifadesinin atanan adı özelliğini kullanmanızı öneririz:

let MyVariable = class MyClass {};

MyClass;
> Uncaught ReferenceError: MyClass is not defined

MyVariable;
> class MyClass {}

MyVariable.name;
> "MyClass"

Sınıf ifadesi kullanarak bir değişkeni ilk kullanıma hazırladığınızda kaldırma kurallarını beklendiği gibi izlenmesini sağlar. Sınıf bildirimleri aynı "geçici ölü bölge" kurallarını let ve const olarak tanımlarsanız hiç çekilmemiş gibi davranırlar. Bu, sınıf bildiriminden önce bir sınıfın çağrılmasının hataya neden olacağı anlamına gelir:

{
    let myVar = new MyClass( "Property string." );

    class MyClass {
        myProp;

        constructor( myString ) {
            this.myProp = myString;
        }
    };
};
> Uncaught ReferenceError: Cannot access 'MyClass' before initialization

Öğrendiklerinizi sınayın

Aşağıdakilerden hangisi bir sınıfı doğru şekilde tanımlar?

class MyClass {}
myClass = class {}
new class()

Bir sınıfta kaç tane constructor() yöntemi olabilir?

Bir
Yok
Sınırsız