Prototip tabanlı programlama şeklidir nesne yönelimli programlama prototip kavramına dayalı, sınıfsız. Bir prototip yeni nesneler oluşturulduğu bir nesnedir. Kendi prototipine yönelik programlama dilinde , bir nesnenin özelliklerine, ister niteliklere ister yöntemlere atıfta bulunsalar da, yuvalar denir ; Veri yuvaları ile kod yuvaları arasında sınıflarla sahip olduğumuz aynı ayrım yoktur. Nesneden sınıfa programlamanın en büyük farkı , orijinal nesnede sağlanmış olsun veya olmasın , yuvaların içeriğini değiştirebilmeniz, daha fazla ekleyebilmeniz veya miras hiyerarşisini değiştirebilmenizdir .
Self , ilk prototip diliydi. Bu tasarlanmış Güneş laboratuarları içinde 1990'larda . Şu anda en iyi bilinen JavaScript'tir .
Sınıf nesneleri:
Prototip nesneleri:
Prototiplerin ana ilgi alanlarından biri dinamik kalıtımdır: herhangi bir nesne, çalışma zamanında, herhangi bir zamanda ebeveyni değiştirebilir.
Bellek kullanımındaki farklılığa dikkat ederek, nesneden prototipe ve nesneden sınıfa paradigmaları somutlaştırabiliriz.
Şu anda prototip nesnelerine dayalı birkaç dil vardır: Self , Lisaac veya ECMAScript belirtimini uygulayan diller ( JavaScript , ActionScript , JScript ). Self ve JavaScript , dinamik olarak yazılmış dillerdir ve yorumlanır. Lisaac ve ActionScript statik olarak yazılır ve derlenir. ActionScript 3.0'da, prototip kalıtımı, miras için birincil mekanizma değildir, çünkü bu rol, bu sürümde artık mevcut olan sınıf mirasına da düşmektedir.
Nesnelerin özellikleri, yürütme bağlamları yığınındaki değişkenlerin değeriyle aynı şekilde kalıtım zincirinde aranır.
Yazı şu şekilde foo.baryorumlanır:
Değişkenin statik bir kopyası değildir; derleyici (yorumlayıcı) tanımlayıcıyla her karşılaştığında, onu belirtildiği gibi yorumlar.
Nesnede bildirilen bir özellik ilk olarak bulunduğundan, nesnenin miras aldığı prototiplerde var olabilecek ile aynı ada sahip olanları gizler. Örneğin, nesne prototipi Object, toStringherhangi bir nesne türü için nesnenin açıklamasını döndüren bir yönteme sahiptir . Daha yararlı bilgiler döndüren Date()bir yöntem dahil olmak üzere, bu işlevin prototipinden miras alınarak oluşturulan nesneler toString; Bu yöntemi gizler toStringarasında Object.prototype.
Bir nesne, prototipi yapıcısından miras alır. Bir nesneyi başlatmak için bir kurucu kullanmıyorsanız, bu bağı oluşturmak için boş bir işlev kullanabilirsiniz.
var A = {}; // identique à « var A = new Object(); » var B = (function () { function F() {} F.prototype = A; return new F(); }()); // depuis JavaScript 1.8.5 la méthode « Object.create(A); » a le même effet // à présent A est dans la chaîne de recherche d'identifiants de B A.compte = 0; A.separ = ": "; B.separ = ", "; for (A.compte = 0; A.compte < 10; A.compte++) { document.write(B.compte + B.separ) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }Bu örnek, sayı türünde bir değer döndüren bir özelliğin mirasını gösterir; bir yöntem dahil olmak üzere bir nesneye referans miras almak da aynı şekilde yapılır.