|
| 1 | +--- |
| 2 | +chapter: 9 |
| 3 | +pageNumber: 61 |
| 4 | +--- |
| 5 | + |
| 6 | +# Prototype (Prototip) |
| 7 | + |
| 8 | +Her obje, bir prototip objeye bağlıdır ve bu objeden özellikler miras alır. `{}` nesnel literallerden oluşturulan nesneler, JavaScript ile birlikte gelen bir obje olan `Object.prototype`'a otomatik olarak bağlanır. |
| 9 | + |
| 10 | +Bir JavaScript yorumlayıcısı (tarayıcınızdaki bir modül), aşağıdaki kodda olduğu gibi, almak istediğiniz bir özelliği bulmaya çalıştığında: |
| 11 | + |
| 12 | +```javascript |
| 13 | +let adult = { age: 26 }, |
| 14 | + retrievedProperty = adult.age; |
| 15 | +// The line above |
| 16 | +``` |
| 17 | + |
| 18 | +Öncelikle, yorumlayıcı, objenin kendisinin sahip olduğu her özelliği kontrol eder. Örneğin, `adult`'ın yalnızca bir kendi özelliği vardır — `age`. Ancak bunun dışında, aslında `Object.prototype`'dan devralınan birkaç özelliği daha vardır. |
| 19 | + |
| 20 | +```javascript |
| 21 | +let stringRepresentation = adult.toString(); |
| 22 | +// the variable has value of '[object Object]' |
| 23 | +``` |
| 24 | + |
| 25 | +`toString` , devralınan bir Object.prototype özelliğidir. Bir objenin string temsilini döndüren bir fonksiyonun değerine sahiptir. Daha anlamlı bir temsil döndürmek istiyorsanız, bunu geçersiz kılabilirsiniz. Sadece adult nesnesine yeni bir özellik ekleyin. |
| 26 | + |
| 27 | +```javascript |
| 28 | +adult.toString = function () { |
| 29 | + return "I'm " + this.age; |
| 30 | +}; |
| 31 | +``` |
| 32 | + |
| 33 | +Şimdi `toString` fonksiyonunu çağırırsanız, yorumlayıcı objenin kendisinde yeni özelliği bulacak ve duracaktır. |
| 34 | + |
| 35 | +Yorumlayıcı, nesnenin kendisinden ve daha sonra prototipi boyunca bulacağı ilk özelliği alır. |
| 36 | + |
| 37 | +Varsayılan Object.prototype yerine kendi nesnenizi prototip olarak ayarlamak için `Object.create`'ı şu şekilde çağırabilirsiniz: |
| 38 | + |
| 39 | +```javascript |
| 40 | +let child = Object.create(adult); |
| 41 | +/* Bu şekilde nesneler oluşturma, varsayılan Object.prototype'u istediğimiz ile kolayca değiştirmemizi sağlar. Bu durumda, child'ın prototipi adult objesidir. */ |
| 42 | + |
| 43 | +child.age = 8; |
| 44 | +/* Daha önce, child'ın kendi age özelliği yoktu ve yorumlayıcı bunu bulmak için child'ın prototipine bakmak zorunda kaldı. |
| 45 | +Şimdi, child'ın kendi yaşını ayarladığımızda, yorumlayıcı daha ileri gitmeyecek. |
| 46 | +Not: adult'ın yaşı hala 26. */ |
| 47 | +let stringRepresentation = child.toString(); |
| 48 | +/* Not: child'ın toString özelliğini geçersiz kılmadık, bu nedenle adult'ın yöntemi çağrılacak. adult'ın toString özelliği yoksa, Object.prototype'un toString yöntemi çağrılacak ve "[object Object]" yerine "I'm 8" alacağız. */ |
| 49 | +``` |
| 50 | + |
| 51 | +`child`'ın prototipi `adult`, `adult`'ın prototipi ise `Object.prototype`'dur. Bu prototipler dizisi **prototip zinciri** olarak adlandırılır. |
0 commit comments