Özet - Prototipler
Object.create ve prototype zincirini kullanarak bir hayvan miras yapısını yazarsın.
Özet - Prototipler
Bu grupta prototipleri öğrendin. Her nesne bir prototipe bağlıdır; Object.getPrototypeOf ile okunur, Object.create ile yeni nesne kurulur. Prototip zinciri özellik aramayı yukarı taşır; hasOwnProperty ile kendi özelliklerini süzersin.
Şimdi bunları bir araya getiren bir hayvan miras yapısı kuracağız: animalProto taban, dogProto ondan türeyen alt katman, rex ise somut nesne.
Uygulama Hayvan miras zincirini kur
animalProto nesnesini tanımla; describe metodu 'bir hayvanım' döndürsün. dogProto'yu Object.create(animalProto) ile üret ve dogProto.bark'a bir işlev ekle: 'hav' döndürsün. rex'i Object.create(dogProto) ile üret; sonra rex.name = 'Rex' ile kendi özelliğini ata. for...in ile rex'in anahtarlarını dolaş; rex.hasOwnProperty(key) doğruysa console.log(key) çağır. Son olarak console.log(rex.describe()), console.log(rex.bark()) ve console.log(Object.getPrototypeOf(rex) === dogProto) çağrılarını yap.
Örnek çözümü göster
const animalProto = {
describe() {
return 'bir hayvanım';
}
};
const dogProto = Object.create(animalProto);
dogProto.bark = function () {
return 'hav';
};
const rex = Object.create(dogProto);
rex.name = 'Rex';
for (const key in rex) {
if (rex.hasOwnProperty(key)) {
console.log(key);
}
}
console.log(rex.describe());
console.log(rex.bark());
console.log(Object.getPrototypeOf(rex) === dogProto);
Son notlar
Prototipler JavaScript'in miras mekanizmasıdır. Yeni kodlarda class sözdizimi de yaygın olsa da arka planda yine prototipler çalışır. Object.create ile zincir kurmak, hasOwnProperty ile süzmek ve Object.getPrototypeOf ile okumak güvenli alışkanlıklardır.
Prototipi doğrudan değiştirmekten (örneğin Object.prototype.x = ...) kaçın; bu tüm nesneleri etkiler ve beklenmedik davranışlara yol açar.
Kendini test et
-
Hangi yöntem yeni bir nesneyi var olan prototiple üretir?
- Object.create(proto)
- Object.getPrototypeOf(proto)
- Object.keys(proto)
- Object.setPrototypeOf(proto)
Cevabı göster
Object.create(proto) — Doğru! Object.create tam olarak bunu yapar.
-
dogProto'yu Object.create ile üret
const dogProto = Object.____;Cevabı göster
const dogProto = Object.create(animalProto); -
Tüm prototip kavramlarını eşleştir
- Object.create
- yeni nesne + prototip
- Object.getPrototypeOf
- prototip okuma
- hasOwnProperty
- kendi özellik kontrolü
- prototype zinciri
- özellik arama yolu