|
| 1 | +## `for in` Döngüsü |
| 2 | + |
| 3 | +Tıpkı `in` operatörü gibi `for in` döngüsü de bir nesnenin özellikleri üzerinde |
| 4 | +iterasyon yaparken prototip zincirini dolaşır. |
| 5 | + |
| 6 | +> **Not:** `for in` döngüsü iterasyon yaparken `enumerable` niteliği `false` |
| 7 | +> olan özelliklere uğramaz; mesela, bir dizinin `length` özelliğini atlar. |
| 8 | + |
| 9 | + // Object.prototype'a bar özelliğini ekle |
| 10 | + Object.prototype.bar = 1; |
| 11 | + |
| 12 | + var foo = {moo: 2}; |
| 13 | + for(var i in foo) { |
| 14 | + console.log(i); // hem bar hem de moo yazar |
| 15 | + } |
| 16 | + |
| 17 | +`for in` döngüsünün davranışını değiştirmek mümkün olmadığı için, istenmeyen |
| 18 | +özelliklerin döngünün içinde filtrelenmesi gerekir, bu da `Object.prototype` |
| 19 | +nesnesinin [`hasOwnProperty`](#object.hasownproperty) metodu ile yapılır. |
| 20 | + |
| 21 | +> **Not:** `for in` döngüsü tüm prototip zincirini dolaştığı için bir nesneye |
| 22 | +> eklenen her yeni kalıtım katmanı döngüyü biraz daha yavaşlatacaktır. |
| 23 | +
|
| 24 | +### `hasOwnProperty` kullarak filtrelemek |
| 25 | + |
| 26 | + // yukarıdaki örnekteki foo nesnesi |
| 27 | + for(var i in foo) { |
| 28 | + if (foo.hasOwnProperty(i)) { |
| 29 | + console.log(i); |
| 30 | + } |
| 31 | + } |
| 32 | + |
| 33 | +Doğru kullanım bu yeni versiyonda gösterildiği gibidir. `hasOwnProperty` kontrol |
| 34 | +edildiği için **sadece** `moo` yazacaktır. `hasOwnProperty` kullanılmaz ise ve |
| 35 | +`Object.protype` 'ın baz özellikleri değiştirilmişse, program bazı hatalara |
| 36 | +yatkın olabilir. |
| 37 | + |
| 38 | +Bunu yapan ve yaygın olarak kullanılan bir JavaScript sistemi [Prototype][1] |
| 39 | +'dır. Bu sistemde `hasOwnProperty` kullanmayan `for in` döngüleri kesinlikle |
| 40 | +hatalı sonuç verecektir. |
| 41 | + |
| 42 | +### Sonuç |
| 43 | + |
| 44 | +`hasOwnProperty` **her zaman** kontrol edilmelidir. Programın içinde çalıştığı |
| 45 | +ortam için, nesnelerin baz özelliklerinin değiştirilip değiştirilmediğine dair |
| 46 | +hiçbir kabul yapılmamalıdır. |
| 47 | + |
| 48 | +[1]: http://www.prototypejs.org/ |
| 49 | + |
0 commit comments