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?
new class()
myClass = class {}
class MyClass {}
Bir sınıfta kaç tane constructor()
yöntemi olabilir?