instanceof
- TypeScript kursu
- İleri seviye
- Ders 27/57
- 4 dk
instanceof ile sınıf daraltmayı öğrenirsin.
instanceof
instanceof operatörü, bir nesnenin belirli bir sınıfın (veya üst sınıfının) örneği olup olmadığını kontrol eder. if (animal instanceof Cat) koşulu prototip zincirini kontrol eder ve TypeScript'in türlü Cat'e daraltmasını sağlar. Sınıf tabanlı hiyerarşilerde daraltma için kullanılır.
class Cat { meow() {} }
class Dog { bark() {} }
function speak(animal: Cat | Dog) {
if (animal instanceof Cat) {
animal.meow(); // Cat
} else {
animal.bark(); // Dog
}
}Sınıf hiyerarşisi
instanceof yalnızca sınıflarla çalışır; interface'lerle kullanılamaz çünkü interface'lerin çalışma zamanı karşılığı yoktur. Bir sınıf hiyerarşisinde instanceof, alt sınıf örneklerini de üst sınıfın örneği olarak kabul eder.
class Animal {}
class Cat extends Animal { meow() {} }
const c: Animal = new Cat();
if (c instanceof Cat) {
c.meow(); // Cat
}
// interface'lerle olmaz:
// if (c instanceof Pet) ... // Pet bir interface ise hataUygulama instanceof ile sınıfları ayır
Cat (meow yöntemi) ve Dog (bark yöntemi) sınıflarını tanımla. speak(animal: Cat | Dog): string fonksiyonunu yaz. Eğer animal instanceof Cat ise "meow" döndür; değilse "bark" döndür. console.log(speak(new Cat())) ve console.log(speak(new Dog())) ile sonuçları yazdır.
Başlangıç kodu
// Cat sınıfını (meow yöntemiyle) tanımla
// Dog sınıfını (bark yöntemiyle) tanımla
// speak(animal: Cat | Dog): string fonksiyonunu instanceof ile yaz
// speak(new Cat()) ve speak(new Dog()) sonuçlarını yazdırÖrnek çözüm
class Cat {
meow() {}
}
class Dog {
bark() {}
}
function speak(animal: Cat | Dog): string {
if (animal instanceof Cat) {
return "meow";
}
return "bark";
}
console.log(speak(new Cat()));
console.log(speak(new Dog()));Beklenen çıktı
meow bark
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 instanceof operatörü neyi kontrol eder?
- İki değerin eşitliğini
- Bir özelliğin varlığını
- Değerin çalışma zamanı tür dizesini
- Bir nesnenin prototip zincirini Doğru cevap
Açıklama: instanceof bir nesnenin prototip zincirini kontrol eder ve belirli bir sınıfın örneği olup olmadığını döner; bu bilgiyle TypeScript türlü daraltır.
2 instanceof ile sınıf kontrolü
class Cat { meow() {} }
class Dog { bark() {} }
function speak(a: Cat | Dog) {
if (____) {
a.meow();
} else {
a.bark();
}
}
class Cat { meow() {} }
class Dog { bark() {} }
function speak(a: Cat | Dog) {
if (a instanceof Cat) {
a.meow();
} else {
a.bark();
}
}
Açıklama: instanceof Cat, a'nın Cat sınıfının örneği olup olmadığını prototip zinciriyle kontrol eder; koşul içinde a Cat'e daraltılır.
3 instanceof parçaları
| Kavram | Anlamı |
|---|---|
instanceof |
prototip zincirini kontrol eder |
instanceof Cat |
Cat sınıfına daraltır |
Sınıf (class) |
instanceof ile kullanılabilir |
Interface |
instanceof ile kullanılamaz |