You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Gördüğünüz gibi, çıktı "John"'u göstermedi bunun yerine `undefined` döndü!
31
+
Gördüğünüz gibi, çıktı "John"u göstermedi bunun yerine `undefined` döndü!
32
32
33
-
Bunun nedeni `setTimeout`'un `user.sayHi` fonksiyonunun objeden ayrı olmasıdır. Son satır şu şekilde yazılabilri:
33
+
Bunun nedeni `setTimeout`'un `user.sayHi` fonksiyonunun objeden ayrı olmasıdır. Son satır şu şekilde yazılabilir:
34
34
35
35
```js
36
36
let f =user.sayHi;
@@ -39,7 +39,7 @@ setTimeout(f, 1000); // lost kullanıcı kaynağı kayboldu
39
39
40
40
Tarayıcıda `setTimeout` kullanımı biraz özeldir: `this=window` olarak ayarlanır. ( Node.JS için `this` timer objesi olur, fakat burada pek de önemli değil.) Öyleyse `this.firstName` bu değeri `window.firstName`'den almaya çalışır, fakat böyle bir şey yok. Buna benzer durumlarda siz de göreceksiniz `this` genelde `undefined` olur.
41
41
42
-
Aslında yapmak istediğimiz çok basit obje metodunu çağrılan yere ( -- ) iletmek istiyoruz ( burada -- zamanlayıcıdır.) Bunun doğru kaynakta çağırıldığına nasıl emin olunabilir?
42
+
Aslında yapmak istediğimiz çok basit obje metodunu çağırılan yere ( -- ) iletmek istiyoruz ( burada -- zamanlayıcıdır). Bunun doğru kaynakta çağırıldığına nasıl emin olunabilir?
43
43
44
44
## Çözüm 1: saklayıcı
45
45
@@ -101,7 +101,7 @@ Basitçe yazımı şu şekildedir:
101
101
let boundFunc =func.bind(kaynak);
102
102
````
103
103
104
-
`func.bind(kaynak)`'ın sonucu özel bir fonksiyon benzeri "egzotik obje"'dir. Fonksiyon gibi çağırılabilir ve saydam bir şekilde çağrıyı `func`'a `this=kaynak` olacak şekilde iletir.
104
+
`func.bind(kaynak)`'ın sonucu özel bir fonksiyon benzeri "egzotik obje"dir. Fonksiyon gibi çağırılabilir ve saydam bir şekilde çağrıyı `func`'a `this=kaynak` olacak şekilde iletir.
105
105
106
106
Diğer bir deyişle `boundFunc` aslında sabit `this`'e sahip `func`'dur.
107
107
@@ -162,7 +162,7 @@ sayHi(); // Hello, John!
162
162
setTimeout(sayHi, 1000); // Hello, John!
163
163
```
164
164
165
-
`(*)` satırında `user.sayHi` metodunu aıyoruz ve `user`'a bağlıyoruz. `sayHi` bu durumda `bağlanmış` fonksiyon oluyor. Böylece tek başına çağrılabilir veya `setTimeout` içerisinde çağrılabilir. Nereden çağırıldığı çok da önemli değidlir. Kaynağı her zaman doğru olacaktır.
165
+
`(*)` satırında `user.sayHi` metodunu alıyoruz ve `user`'a bağlıyoruz. `sayHi` bu durumda `bağlanmış` fonksiyon oluyor. Böylece tek başına çağırılabilir veya `setTimeout` içerisinde çağırılabilir. Nereden çağırıldığı çok da önemli değildir. Kaynağı her zaman doğru olacaktır.
166
166
167
167
Gördüğünüz gibi tüm argümanlar "olduğu gibi" iletilir, sadece `this` `bind` tarafından sabitlenmiştir:
Eğer bir objenin birçok metodu var ise bunu aktik olarak gerekli yerlere iletep, bunları bir döngü içerisine alabiliriz:
184
+
Eğer bir objenin birçok metodu var ise bunu aktif olarak gerekli yerlere iletip, bunları bir döngü içerisine alabiliriz:
185
185
186
186
```js
187
187
for (let key in user) {
@@ -196,7 +196,7 @@ Bu şekilde büyük bağlama olayları için bazı JavaScript kütüphanelerinde
196
196
197
197
## Özet
198
198
199
-
`func.bind(kaynak, ...args)``func` fonksiyonunun "bağlanmış hali"'ni döndürür. Bu bağlanmış halde `this` ve argümanlar sabitlenir.
199
+
`func.bind(kaynak, ...args)` `func` fonksiyonunun "bağlanmış hali"ni döndürür. Bu bağlanmış halde `this` ve argümanlar sabitlenir.
200
200
201
201
Bind genelde obje metodlarındaki `this`'in sabitlenmesi amacıyla kullanılır, sonrasında istenilen yere iletilebilir. `setTimeout` örneği gibi. `bind`'in modern geliştirmede kullanılmasının birçok nedeni vardır bunlara ilerleyen konularda değineceğiz.
0 commit comments