Skip to content

Commit 6ea8784

Browse files
committed
Translated function/this.
1 parent 94b16ab commit 6ea8784

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

doc/tr/function/this.md

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
## `this` Nasıl Çalışır
2+
3+
JavaScript'te `this` özel kelimesinin anlamı diğer programlama dillerinden
4+
farklıdır. `this` kelimesinin birbirinden farklı anlamlar yüklendiği tam
5+
**beş** durum vardır.
6+
7+
### Genel kapsam
8+
9+
this;
10+
11+
`this` kelimesi genel kapsamda kullanıldığında *global* nesneye işaret eder.
12+
13+
14+
### Bir fonksiyon çağırma
15+
16+
foo();
17+
18+
Burada `this` yine *global* nesneye işaret eder.
19+
20+
> **ES5 Notu:** Mutlak modda bu davranış **kaldırılmıştır**. Bu durumda `this`
21+
> kelimesinin değeri `undefined` olacaktır.
22+
Here `this` will again refer to the *global* object.
23+
24+
### Bir metod çağırma
25+
26+
test.foo();
27+
28+
Bu örnekte `this` kelimesi `test` 'e işaret edecektir.
29+
30+
### Bir nesne oluşturucu çağırma
31+
32+
new foo();
33+
34+
Bir fonksiyon başında `new` anahtar kelimesi ile birlikte çağrılırsa bir
35+
[nesne oluşturucu](#function.constructors) olarak davranır. Bu fonksiyonun
36+
içinde `this` kelimesi *yeni oluşturulan* `Object` 'e işaret eder.
37+
38+
### `this` kelimesinin atanması
39+
40+
function foo(a, b, c) {}
41+
42+
var bar = {};
43+
foo.apply(bar, [1, 2, 3]); // dizi aşağıdaki gibi açılır
44+
foo.call(bar, 1, 2, 3); // sonuç: a = 1, b = 2, c = 3
45+
46+
`Function.prototype` 'ın `call` veya `apply` metodları kullanıldığında, çağrılan
47+
fonksiyonun içinde `this` 'in değeri ilk argümanın değeri olarak **atanır**.
48+
49+
Sonuç olarak, yukarıdaki örnekte *metod çağırma* durumu geçerli **olmayacak**,
50+
bunun yerine `foo` fonksiyonu içinde `this` 'in değeri `bar` olacaktır.
51+
52+
> **Not:** `this` kelimesi bir `Object` değişmezi içinde nesnenin kendisine
53+
> işaret etmek için **kullanılamaz**. Yani `var obj = {me: this}` gibi bir
54+
> ifadede `me`, `obj` nesnesine işaret **etmeyecektir**, `this` sadece yukarıda
55+
> açıklanan beş durumdan biri ile kullanılabilir.
56+
57+
### Sık düşülen yanılgılar
58+
59+
Yukarıdaki durumların çoğu mantıklı görünse bile, ilk durum dilin tasarım
60+
hatalarından biri olarak değerlendirilmelidir çünkü **hiçbir** pratik
61+
kullanılımı yoktur.
62+
63+
64+
Foo.method = function() {
65+
function test() {
66+
// this genel nesneye işaret eder
67+
}
68+
test();
69+
}
70+
71+
Bir başka yanılgı `test` fonksiyonunun içinde `this` 'in `Foo` 'ya işaret
72+
edeceğinin sanılmasıdır, ama bu **doğru değildir**.
73+
74+
`test` fonksiyonu içinden `Foo` 'ya erişmenin yolu `method` içinde bir lokal
75+
değişken oluşturmaktır.
76+
77+
Foo.method = function() {
78+
var that = this;
79+
function test() {
80+
// Burada this yerine that kullanın
81+
}
82+
test();
83+
}
84+
85+
`that` kelimesinin dilde özel bir anlamı yoktur, ama sıklıkla dış kapsamdaki
86+
`this` 'e işaret etmek için kullanılır. Bu yöntem [closure](#function.closures)
87+
kavramı ile birlikte kullanıldığında `this` değerini program içinde taşımaya da
88+
yarar.
89+
90+
### Metodları değişkenlere atamak
91+
92+
JavaScript'te mevcut **olmayan** bir başka özellik de fonksiyon isimlendirmedir,
93+
başka bir deyişle bir metodu bir değişkene **atamak**.
94+
95+
var test = someObject.methodTest;
96+
test();
97+
98+
İlk durum nedeniyle `test` artık sıradan bir fonksiyon olarak davranacaktır; bu
99+
nedenle `test` fonksiyonu içinde `this` artık `someObject` 'e işaret
100+
etmeyecektir.
101+
102+
`this` kelimesinin geç bağlanması ilk bakışta yanlış görünse de, aslında
103+
[prototipsel kalıtımı](#object.prototype) mümkün kılan şey budur.
104+
105+
function Foo() {}
106+
Foo.prototype.method = function() {};
107+
108+
function Bar() {}
109+
Bar.prototype = Foo.prototype;
110+
111+
new Bar().method();
112+
113+
Yukarıda `Bar` sınıfına ait bir nesnenin `method` 'u çağrıldığında `this` bu
114+
nesneye işaret edecektir.
115+
116+

0 commit comments

Comments
 (0)